+
+type TYNCallback = procedure (yes:Boolean);
+
+procedure YNKeyDownProc (win: TGUIWindow; Key: Byte);
+begin
+ if win.UserData = nil then exit;
+ case Key of
+ IK_Y, IK_SPACE: TYNCallback(win.UserData)(true);
+ IK_N: TYNCallback(win.UserData)(false);
+ end;
+end;
+
+procedure YesButtonCB (ctl: TGUITextButton);
+begin
+ if ctl.UserData = nil then exit;
+ TYNCallback(ctl.UserData)(true);
+end;
+
+procedure NoButtonCB (ctl: TGUITextButton);
+begin
+ if ctl.UserData = nil then exit;
+ TYNCallback(ctl.UserData)(false);
+end;
+
+function CreateYNMenu (WinName, Text: String; MaxLen: Word; FontID: DWORD; ActionProc: TYNCallback): TGUIWindow;
+var
+ menu: TGUIMenu;
+begin
+ //if length(Text) = 0 then exit;
+ Result := TGUIWindow.Create(WinName);
+ with Result do
+ begin
+ //OnKeyDownEx := @YNKeyDownProc;
+ //UserData := @ActionProc;
+ menu := TGUIMenu(Result.AddChild(TGUIMenu.Create(gMenuSmallFont, gMenuSmallFont, '')));
+ with menu do
+ begin
+ Name := '__temp_yes_no_menu:'+WinName;
+ YesNo := true;
+ AddText(Text, MaxLen);
+ with AddButton(nil, _lc[I_MENU_YES]) do begin ProcEx := @YesButtonCB; UserData := @ActionProc; end;
+ with AddButton(nil, _lc[I_MENU_NO]) do begin ProcEx := @NoButtonCB; UserData := @ActionProc; end;
+ end;
+ DefControl := '__temp_yes_no_menu:'+WinName;
+ SetActive(nil);
+ end;
+end;
+
+