GameHunter писал(а):
Ясно, что при желании можно вызвать стандартные виндовские диалоги. А какое-нибудь более универсальное средство - для любой формы (возможно, специально спроектированной) - есть?
Если WinApi устроит, тогда могу предложить тестовый модуль.
Цитата:
MODULE Box;
IMPORT StdLog, WinApi;
VAR h*, u*: INTEGER;
vv*, uu*: ARRAY 20 OF CHAR;
q*: ARRAY 20 OF SHORTCHAR;
d*: ARRAY 20 OF SHORTCHAR;
PROCEDURE StringToString* (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR);
VAR i, max: INTEGER;
BEGIN i := 0; max := LEN(out)-1;
WHILE (in[i] # 0X) & (i < max) DO
IF ORD(in[i]) < 256 THEN out[i] := in[i] END;
INC(i)
END;
out[i] := 0X
END StringToString;
PROCEDURE FBox*():INTEGER;
VAR
b, f: ARRAY 20 OF CHAR; uType: SET;
lpText, lpCaption: WinApi.PtrSTR; hWnd: WinApi.HWND;
BEGIN
hWnd := h;
StringToString(uu, b);
d := SHORT(b);
StringToString(vv, f);
q := SHORT(f);
lpText := d;
lpCaption := q;
uType := {2};
RETURN WinApi.MessageBox(hWnd, lpText, lpCaption, uType);
END FBox;
PROCEDURE OutLog*;
VAR n: INTEGER;
BEGIN
n := FBox();
StdLog.Int(n); StdLog.Ln
END OutLog;
END Box.
(!)Box.OutLog
Создает и отобpажает блок диалога, содеpжащий указанное сообщение и заголовок, а также пpедопpеделенные пиктогpаммы и текстовые кнопки, в соответствии с паpаметpом uType:
0 – Ок/Отмена
1 – Прервать/ Повтор/Пропустить
2 – Да/Нет
4 -- Х
5 -- ?
6 -- i
7 -- Ок (Сообщение в правой стороне)
8..31 -- Ок