If statement 如何在用户用鼠标[Pascal]点击程序后运行程序

If statement 如何在用户用鼠标[Pascal]点击程序后运行程序,if-statement,pascal,If Statement,Pascal,我需要运行一个过程,当用户选择它与鼠标点击 程序将显示: 十进制到二进制 二进制到十进制 出口 若用户点击十进制到二进制,那个么它运行dectobin过程;若点击二进制到十进制,那个么它运行bintodec过程;若用户点击退出,那个么它退出程序 在执行菜单过程之后,我必须输入什么样的IF语句才能使其工作 program menu_with_mouse; uses crt,mouse,mmsystem; var n: byte; var menu_element: array [1..3] of

我需要运行一个过程,当用户选择它与鼠标点击

程序将显示:

十进制到二进制

二进制到十进制

出口

若用户点击十进制到二进制,那个么它运行dectobin过程;若点击二进制到十进制,那个么它运行bintodec过程;若用户点击退出,那个么它退出程序

在执行菜单过程之后,我必须输入什么样的IF语句才能使其工作

program menu_with_mouse;
uses crt,mouse,mmsystem;
var n: byte;
var menu_element: array [1..3] of string;
var selected_one_element: boolean;
var mouse_on_element: byte;

procedure Menu;
var sel_el_nr: byte;
    Event: TMouseEvent;
begin
    menu_element[1] := 'decimal -> binary';
    menu_element[2] := 'binary -> decimal';
    menu_element[3] := 'Exit';

    mouse_on_element := 1;
    for n := 1 to 3 do
    begin
       if n = mouse_on_element then textcolor(green)
       else textcolor(LightGray);
       writeln(menu_element[n]);
    end;

    sel_el_nr := 0;
InitMouse;
   Repeat
      GetMouseEvent(Event);

         mouse_on_element := GetMouseY+1;
         for n := 1 to 3 do
         begin
            if (n = mouse_on_element) and
            (GetMouseX < length(menu_element[n])) then textcolor(green)
         else textcolor(LightGray);
            writeln(menu_element[n]);
         end;

     With Event do
     If (Buttons=MouseLeftbutton) and (Action=MouseActionDown) then
     begin
        if mouse_on_element <= 3 then
           selected_one_element := true;
     end;
   Until ((Event.Buttons=MouseLeftbutton) and (Event.Action=MouseActionDown))
   and selected_one_element;
DoneMouse;

end;

procedure dectobin;
var dec: integer;
x: char;
bin: string;
begin
clrscr;
readln(dec);
repeat 
if (dec mod 2 = 0) then bin:='0'+bin 
else bin:='1'+bin; 
dec:= dec div 2;
until dec = 0; 
writeln(bin);
readln;
end;


BEGIN
clrscr;

Menu;

readln;

END.
program menu\u,带鼠标;
使用crt、鼠标、彩信系统;
var n:字节;
var menu_元素:字符串的数组[1..3];
var选择一个元素:布尔值;
var mouse_on_元素:字节;
程序菜单;
变量sel_el_n r:字节;
事件:TMouseEvent;
开始
菜单元素[1]:=“十进制->二进制”;
菜单元素[2]:=“二进制->十进制”;
菜单元素[3]:=“退出”;
鼠标在元素上的位置:=1;
对于n:=1到3 do
开始
如果n=鼠标点击元素,则文本颜色(绿色)
颜色(浅灰色);
writeln(菜单元素[n]);
终止
选择编号:=0;
小白鼠;
重复
GetMouseeEvent(事件);
在元素上单击鼠标:=GetMouseY+1;
对于n:=1到3 do
开始
如果(n=鼠标点击元素)和
(GetMouseX如果将鼠标放在控制台窗口中的元素上,则文本行不会像按钮或任何视觉控件那样工作。
它们只是文本字符串

在使用可视控件(按钮、文本框等)的应用程序上,这些控件向程序的eventhandler发送称为事件的特殊信号,然后程序查看它对给定事件所做的操作。这些控件知道它们在计算机屏幕上的坐标和边界,并且可以检测鼠标按钮是否在这些边界内单击

所以,要在控制台窗口上工作,您必须知道每个菜单元素的位置。在控制台窗口中,鼠标Y是行号(从0开始),鼠标X是从左到右(从0开始)的字符。第一行的第一个字符表示鼠标X=0,鼠标Y=0

如果设置菜单,使所有菜单元素始终位于同一行, 您可以测试鼠标Y是否与菜单元素的行号匹配

请参阅我的简单示例(它不测试菜单项长度-鼠标X坐标):

希望你明白我的意思:)

在控制台中,使用数字来选择菜单中的项目往往更方便用户。 它也更容易实现

Menu
-----
  1) Menu A
  2) Menu B
  3) Menu C

What do you want to do ?(1-3):  

PS:对于控制台表单,如果NCURSES库内置了任何类型的事件系统,请查看NCURSES库。我没有用过它,但人们似乎很高兴:)

视频/鼠标/键盘单元已经在*nix上与ncurses/terminfo接口。OP已经在使用鼠标了,最好也使用另外两个(而不是传统的Crt)。查看免费Pascal附带的俄罗斯方块和samegame控制台演示。Samegame是鼠标驱动的。
Menu
-----
  1) Menu A
  2) Menu B
  3) Menu C

What do you want to do ?(1-3):