当用户通过鼠标点击选择它时,我需要运行一个程序。
程序将显示:
十进制到二进制
二进制到十进制
退出
如果人们点击十进制到二进制,那么它运行dectobin程序,如果在二进制到十进制,那么它运行bintodec程序,如果他点击Exit然后它退出程序。
执行Menu程序后,我需要在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.
答案 0 :(得分:0)
在控制台窗口中,文本行不像按钮或任何可视控件。 它们只是文本串。
在使用可视控件(按钮,文本框等等)的应用程序上,这些控件会向程序的事件处理程序发送称为事件的特殊信号,然后程序会查看它为给定事件执行的操作。这些控件在计算机屏幕上知道它们的坐标和边界,并且可以检测是否在这些边界内单击了鼠标按钮。
因此,要在控制台窗口上进行此操作,您必须知道每个菜单元素的位置。在控制台窗口中,鼠标Y是行号(从0开始),鼠标X是从左到右的字符(从0开始)。第一行的第一个字符给出鼠标X = 0,鼠标Y = 0。
如果您设置菜单以便所有菜单元素始终在同一行上, 您可以测试鼠标Y是否与菜单元素的行号匹配。
请参阅我的简单示例(它不测试菜单项长度 - 鼠标X坐标):
program Menu;
Uses Mouse;
var
Event: TMouseEvent;
begin
writeln('Menu 1'); // line 0
writeln('Menu 2'); // line 1
writeln('Menu 3'); // line 2
InitMouse;
repeat
GetMouseEvent(Event);
If (Event.Buttons=MouseLeftbutton) and (Event.Action=MouseActionDown) then
if GetMouseY = 0 then Writeln('Item 1 pressed')
else if GetMouseY = 1 then Writeln('Item 2 pressed')
else if GetMouseY = 2 then Writeln('Item 3 pressed');
until false;
DoneMouse;
end.
希望你明白这一点:)
在控制台中,使用数字选择菜单中的项目往往更加用户友好。 实现起来也更简单。
Menu
-----
1) Menu A
2) Menu B
3) Menu C
What do you want to do ?(1-3):
PS:对于控制台表单,如果内置了任何事件系统,请查看NCURSES库。我没有用它,但人们似乎很高兴:)