If statement 如何在用户用鼠标[Pascal]点击程序后运行程序
我需要运行一个过程,当用户选择它与鼠标点击 程序将显示: 十进制到二进制 二进制到十进制 出口 若用户点击十进制到二进制,那个么它运行dectobin过程;若点击二进制到十进制,那个么它运行bintodec过程;若用户点击退出,那个么它退出程序 在执行菜单过程之后,我必须输入什么样的IF语句才能使其工作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
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):