OberonCore
https://forum.oberoncore.ru/

Два вопроса про формы в ББ.
https://forum.oberoncore.ru/viewtopic.php?f=23&t=3111
Страница 1 из 1

Автор:  GameHunter [ Понедельник, 27 Декабрь, 2010 18:21 ]
Заголовок сообщения:  Два вопроса про формы в ББ.

Уважаемые специалисты,

Есть два вопроса про формы в ББ.
1) Хочется показывать форму пользователю вызовом процедуры, и чтобы управление следующему после вызова оператору передовалось только после закрытия формы. Как это сделать?
2) Хочется, чтобы форма могла висеть только над одним документом из несколькиз открытых, а не над любым, как, например, стандартный диалог Find/Replace. Как это сделать?

Автор:  Евгений Темиргалеев [ Понедельник, 27 Декабрь, 2010 18:38 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

Если Вы про модальность, то:
Часть первая: подходы к проектированию писал(а):
В первой части руководства по BlackBox дано введение в проектные схемы, которые используются в BlackBox. Знание этих схем облегчает понимание и запоминание более детальных проектных решений в различных модулях BlackBox.

...
Наконец, один из наиболее общих и важных аспектов дружелюбности к пользователю - это исключение модальных диалогов...

Автор:  GameHunter [ Понедельник, 27 Декабрь, 2010 18:46 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

Модальность - это когда не возможно переключиться с формы на другой документ. Это - да, не дружелюбно. Я (в п. 1) только про возврат обратно в вызывающую процедуру - "дружелюбие к программисту" :)

Автор:  Иван Кузьмицкий [ Понедельник, 27 Декабрь, 2010 18:51 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

Форма - это документ, его появление не должно вмешиваться в логику программы. То есть, логика программы и документ на экране - разные вещи.

Может, стоит помозговать, как выстроить интерфейс по-другому?

Автор:  GameHunter [ Понедельник, 27 Декабрь, 2010 18:57 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

Хочется просто что-то по быстрому спросить у пользователя. При чём здесь логика программы?

Автор:  Евгений Темиргалеев [ Понедельник, 27 Декабрь, 2010 19:02 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

При том, что "быстро спросить у пользователя" возможно удастся другими средствами. Или вообще не придётся "быстро спрашивать". Может быть сформулируете задачу?

Автор:  GameHunter [ Понедельник, 27 Декабрь, 2010 19:09 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

Да никакой конкретной задачи нет - просто щупаю подсистему форм. Навскидку хочется, например, написать диалог запроса шрифта для своей библиотеки.

Автор:  Александр Ильин [ Понедельник, 27 Декабрь, 2010 19:17 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

GameHunter писал(а):
Да никакой конкретной задачи нет - просто щупаю подсистему форм. Навскидку хочется, например, написать диалог запроса шрифта для своей библиотеки.
В ББ есть модальные запросы, посмотрите реализацию (открытие файла, тот же выбор шрифта).

Автор:  GameHunter [ Понедельник, 27 Декабрь, 2010 19:23 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

Ясно, что при желании можно вызвать стандартные виндовские диалоги. А какое-нибудь более универсальное средство - для любой формы (возможно, специально спроектированной) - есть?

Автор:  Александр Ильин [ Понедельник, 27 Декабрь, 2010 19:41 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

GameHunter писал(а):
Ясно, что при желании можно вызвать стандартные виндовские диалоги. А какое-нибудь более универсальное средство - для любой формы (возможно, специально спроектированной) - есть?
Посмотрите модуль HostDialog:
Код:
PROCEDURE WaitDialogClose;
(* simulates modal dialog *)

Автор:  id_ler [ Понедельник, 27 Декабрь, 2010 19:53 ]
Заголовок сообщения:  Re: Два вопроса про формы в ББ.

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 -- Ок

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/