Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Не могу понять разработчиков VCL   Найти похожие ветки 

 
novill ©   (2007-03-12 14:55) [0]

Есть простая функция showmessage с одним параметром и очень простым действием.
Зачем ее реализовывать через дикую цепочку вложенных вызовов???

ShowMessage(const Msg: string) -> ShowMessagePos(Msg, -1, -1) -> MessageDlgPos(Msg, mtCustom, [mbOK], 0, X, Y) -> MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, X, Y, "") -> CreateMessageDialog(Msg, DlgType, Buttons)
И заканчивается это сотней строчек кода.

Есть же апишные MessageBox и MessageBoxEx


 
tesseract ©   (2007-03-12 14:58) [1]


> Зачем ее реализовывать через дикую цепочку вложенных вызовов?
> ??


Уменьшают объём занимаемой памяти.


 
Сергей М. ©   (2007-03-12 15:01) [2]


> Есть же апишные


"апишные" для КАКОЙ ОС ?

Вдумайся)


 
Ega23 ©   (2007-03-12 15:01) [3]


 if not (MessageBox(Handle, PChar("Добавить данные об автомобиле?"), PChar("Внимание!"), MB_OKCANCEL or MB_ICONINFORMATION)=IDOK) then Exit;


Можно и так. И даже красивше будет. Вот только Handle обязательно нужен.


 
Игорь Шевченко ©   (2007-03-12 15:02) [4]


> Вот только Handle обязательно нужен.


Можно 0 поставить


 
DiamondShark ©   (2007-03-12 15:03) [5]


> Зачем ее реализовывать через дикую цепочку вложенных вызовов?
> ??

Верно, незачем.
Поэтому она и не реализована через дикую цепочку, а реализована через один вызов ShowMessagePos.


 
Kerk ©   (2007-03-12 15:03) [6]

> [4] Игорь Шевченко ©   (12.03.07 15:02)

Вместо caption и кнопок тоже можно 0 ставить. Чем часто пользуюсь :))


 
Ega23 ©   (2007-03-12 15:06) [7]


> Можно 0 поставить


Блин. Я - дебил.


 
novill ©   (2007-03-12 15:06) [8]

> [1] tesseract ©   (12.03.07 14:58)
ага )))

> [2] Сергей М. ©   (12.03.07 15:01)
> "апишные" для КАКОЙ ОС ?
Для всех виников начиная с 95, в  CLX реализация showmessage другая. Или ты что-то еще имел в виду?

> [3] Ega23 ©   (12.03.07 15:01)
Application.handle там по-любому передается


 
Ega23 ©   (2007-03-12 15:07) [9]


> Application.handle там по-любому передается


Не "по любому". Application-а может и не быть.


 
Сергей М. ©   (2007-03-12 15:09) [10]


> novill ©   (12.03.07 15:06) [8]


> Для всех виников начиная с 95, в  CLX реализация showmessage
> другая.


Кто такие "виники" ?
Какое отношение эти "веники" имеют к CLX ?


 
novill ©   (2007-03-12 15:11) [11]

> [9] Ega23 ©   (12.03.07 15:07)
> Не "по любому". Application-а может и не быть.

Не может не быть - он в модуле Forms, который uses в модуле Dialogs, в котором объявлена все функции цепочки.


 
Ega23 ©   (2007-03-12 15:14) [12]


> Не может не быть - он в модуле Forms, который uses в модуле
> Dialogs, в котором объявлена все функции цепочки.


И что?


 
novill ©   (2007-03-12 15:14) [13]

> [10] Сергей М. ©   (12.03.07 15:09)


Ты  писал:

> [2] Сергей М. ©   (12.03.07 15:01)
>
> > Есть же апишные
>
>
> "апишные" для КАКОЙ ОС ?
>
> Вдумайся)


Апишные для windows 95, 98, NT, 2000, XP

Почему не воспользоваться встроенными функциями, если все равно код пишется для Windows?


 
Сергей М. ©   (2007-03-12 15:24) [14]


> novill ©   (12.03.07 15:14) [13]


> если все равно код пишется для Windows?


Это при CLX-то ?!


 
novill ©   (2007-03-12 15:35) [15]

> [14] Сергей М. ©   (12.03.07 15:24)

НЕТ!

Код пишется для Windows, используется VCL.


 
novill ©   (2007-03-12 15:37) [16]

> [12] Ega23 ©   (12.03.07 15:14)

К моменту вызова он уже создан.


 
Ega23 ©   (2007-03-12 15:51) [17]


> К моменту вызова он уже создан.


Так, всё. Я сегодня что-то торможу нипадецки.


 
Сергей М. ©   (2007-03-12 15:51) [18]


> И заканчивается это сотней строчек кода


Чем тебя это смущает ?


 
novill ©   (2007-03-12 16:03) [19]

> [18] Сергей М. ©   (12.03.07 15:51)

Почему не использовать апишные функции MessageBox?


 
Сергей М. ©   (2007-03-12 16:05) [20]


> novill ©   (12.03.07 16:03) [19]


Вместо какой конкретно VCL-ф-ции  ?


 
novill ©   (2007-03-12 16:11) [21]

> [0] novill ©   (12.03.07 14:55)
> ShowMessage


 
Сергей М. ©   (2007-03-12 16:16) [22]


> novill ©   (12.03.07 16:11) [21]


А о принципиальных отличиях в реализациях ShowMessage и MessageBox ты в курсе ?


 
Empleado ©   (2007-03-12 16:18) [23]


> novill ©   (12.03.07 16:11) [21]

Возможно для того, чтобы иметь возможность реализовать диалог с пользователем, и приостановить выполнение кода до соответствующего ожидаемого действия со стороны оного?


 
Игорь Шевченко ©   (2007-03-12 16:21) [24]

MessageBox мерзко пищит в отличие от ShowMessage


 
Ega23 ©   (2007-03-12 16:23) [25]

Откровенно говоря, ShowMessage использую только в исключительных случаях. Например - для вывода какой-нибудь Debug-информации.
В остальном - MessageBox


 
homm ©   (2007-03-12 16:27) [26]

> MessageBox мерзко пищит в отличие от ShowMessage

Наверняка флагами убирается. Я просто такой проблемой не задавался. Уменя звуковая схема "без звука" в винде, ибо бесит.


 
novill ©   (2007-03-12 16:32) [27]

> [22] Сергей М. ©   (12.03.07 16:16)
>
> > novill ©   (12.03.07 16:11) [21]
>
>
> А о принципиальных отличиях в реализациях ShowMessage и MessageBox ты в курсе ?

Расскажи, об этом и вопрос!


 
Игорь Шевченко ©   (2007-03-12 16:36) [28]

homm ©   (12.03.07 16:27) [26]


> Наверняка флагами убирается.


Вроде не убирается


 
Сергей М. ©   (2007-03-12 16:40) [29]


> novill ©   (12.03.07 16:32) [27]


ShowMessage() открывает модальную (на уровне тек.приложения)  VCL-форму. Со всеми вытекающими из этого возможностями по обработке специфичных для VCL сообщений.


 
novill ©   (2007-03-12 17:03) [30]

> [28] Игорь Шевченко ©   (12.03.07 16:36)
> homm ©   (12.03.07 16:27) [26]
>
>
> > Наверняка флагами убирается.
>
>
> Вроде не убирается

Принципиально убрать можно.
Например вот так MessageBox(0,Pchar("hi"),0,$00000070);
Хотя если быть честным, то стоит пользовать MB_USERICON - тогда звука нет но сообщение сдвигается в ожидании пользовательской картинки :)


> [29] Сергей М. ©   (12.03.07 16:40)
> возможностями по обработке специфичных для VCL сообщений.

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


 
GrayFace ©   (2007-03-12 17:04) [31]

В VCL-вском MessageDlg возможны комбинации типа [mbOK, mbAbort].

> ShowMessage() открывает модальную (на уровне тек.приложения) VCL-форму. Со всеми вытекающими из этого возможностями по обработке специфичных для VCL сообщений.

Все равно он не рассчитан на то что в процессе исполнения с ним будут "общаться", т.к. модальный.


 
vuk ©   (2007-03-12 17:13) [32]

У VCL-ной функции есть один минус. Заголовки на кнопках всегда по-английски. У API-шной функции - зависят от локализации Windows.


 
homm ©   (2007-03-12 17:17) [33]

> У VCL-ной функции есть один минус. Заголовки на кнопках
> всегда по-английски. У API-шной функции - зависят от локализации
> Windows.
Ненавижу когда мне показывают тупые сообщения с английской копкой OK!! ]:>


 
novill ©   (2007-03-12 17:20) [34]

> [32] vuk ©   (12.03.07 17:13)
> У VCL-ной функции есть один минус. Заголовки на кнопках всегда по-английски.


Насоклько я помню, это исправляется заменой файла consts.pas


 
Чапаев ©   (2007-03-12 18:20) [35]

> У VCL-ной функции есть один минус. Заголовки на кнопках
> всегда по-английски.
Гм... Если ты создаёшь локализированные версии софта, то какая проблема заменить надписи? Если не создаёшь, сильно ли юзера спасёт при работе с англоязычной программой кнопка "Отмена" вместо "Cancel"?


 
vuk ©   (2007-03-12 19:03) [36]

to Чапаев ©   (12.03.07 18:20) [35]:
>Если ты создаёшь локализированные версии софта, то какая проблема
>заменить надписи?
Если пользоваться API-шной, то менять не нади ничего. Совсем. Все точно соответствует локализации Windows.


 
Чапаев ©   (2007-03-12 19:10) [37]

> [36] vuk ©   (12.03.07 19:03)
Хмык. Если локализацию пишешь, то проблема ли добавить ещё одну строчку для "Отмены"?


 
vuk ©   (2007-03-12 19:25) [38]

Ну... Там же не только "Отмена"... И опять же, зачем делать работу, которую уже проделали?


 
Чапаев ©   (2007-03-12 19:29) [39]

Учитывая, что я точно как в [25] действую, не знаю даже, что сказать. &-)


 
Gero ©   (2007-03-12 20:46) [40]

Написал свой MessageBox и использую его. Благодаря этому заменил подписи на кнопках на человеческие и добавил галку «больше не спрашивать».



Страницы: 1 2 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.028 c
2-1173816316
FreeZ
2007-03-13 23:05
2007.04.08
Поочерёдность задач!


15-1173986770
Kerk
2007-03-15 22:26
2007.04.08
Выращивание роз


1-1171303374
tequilla4white
2007-02-12 21:02
2007.04.08
IXMLNode.Count возвращает неверное значение


15-1173772137
Ксандр
2007-03-13 10:48
2007.04.08
Простые числа


2-1173473079
Ezorcist
2007-03-09 23:44
2007.04.08
JPEG