Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

Не могу понять разработчиков 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 и использую его. Благодаря этому заменил подписи на кнопках на человеческие и добавил галку «больше не спрашивать».


 
Gero ©   (2007-03-12 20:47) [41]

А начсет локализации MessageBox — выглядит не очень хорошо, когда вопрос на одном языке, а варианты ответа к нему на другом.


 
Суслик ©   (2007-03-12 20:50) [42]

я тоже написал свой вариант MessageBox. добавил:
1. свои подписи
2. больше не спрашивать.
3. таймер обратного отсчета.


 
Gero ©   (2007-03-12 21:00) [43]

> [42] Суслик ©   (12.03.07 20:50)
> 3. таймер обратного отсчета.

В такой штуке необходимость возникает очень редко. Да и вобще, опасная это вещь, думаю, можно перепроектировать так, чтобы обойтись без этого.


 
Чапаев ©   (2007-03-12 21:52) [44]

> [41] Gero ©   (12.03.07 20:47)
Ну вот примерно об этом я и говорил...


 
Чапаев ©   (2007-03-12 21:53) [45]

> [43] Gero ©   (12.03.07 21:00)
Не знаю... Головач в своём "ПИ-дизайне" рекомендует использовать там, где уместны варианты по-умолчанию.


 
vuk ©   (2007-03-12 21:54) [46]

to Gero ©   (12.03.07 21:00) [43]:
>В такой штуке необходимость возникает очень редко.
Это да. Мне, вот, единственный раз, когда такое понадобилось - это диалоги в интерактивном киоске (каталог товаров, продажа) с сенсорным экраном. Но там один хрен пришлось ваять свой аналог MessageBox, т.к. и интерфейс совсем другой и окна нестандартные.


 
Gero ©   (2007-03-12 21:57) [47]

> [45] Чапаев ©   (12.03.07 21:53)

Головач тоже ошибается.


 
MsGuns ©   (2007-03-12 23:12) [48]

>homm ©   (12.03.07 17:17) [33]
>Ненавижу когда мне показывают тупые сообщения с английской копкой OK!! ]:>

Лучше уж американский вариант с "Waw !!!"


 
Piter ©   (2007-03-12 23:48) [49]

Ega23 ©   (12.03.07 15:06) [7]
Блин. Я - дебил


почему дебил? Если поставить 0 - это не совсем тот MessageBox - он не заблокирует окно с handle, то есть будет отображет бокс не в модальном режиме, это обычно не совсем то, что хочется, такой бокс может просто "потеряться" под другими окнами, что зачастую и происходит.


 
Игорь Шевченко ©   (2007-03-13 00:10) [50]

novill ©   (12.03.07 17:03) [30]


>  MessageBox(0,Pchar("hi"),0,$00000070);


Это зависит от звуковой схемы. Будет звук от события Open


 
vuk ©   (2007-03-13 00:31) [51]

Про локализацию всяких кнопок. Музыкой навеяло...
Как-то раз, при инсталляции не помню уже чего, в мастере установки на кнопке завершения наблюдалась многозначительная такая надпись: "Финский".


 
Германн ©   (2007-03-13 00:49) [52]


> vuk ©   (13.03.07 00:31) [51]
>
> Про локализацию всяких кнопок. Музыкой навеяло...
> Как-то раз, при инсталляции не помню уже чего, в мастере
> установки на кнопке завершения наблюдалась многозначительная
> такая надпись: "Финский".

Ты хоть что-то прочитать смог! А я помню в подобной ситуации модальную форму с двумя кнопками. Обе содержат бессмысленный набор символов. Внимание вопрос! Какую из них нажимать? :)


 
Box   (2007-03-13 01:11) [53]

for i := 0 to 200 do
  if (i mod 16) =0 then MessageBox(0, "", PChar(IntToStr(i)), i);
Начина с i=80 и выше больше не "пикает"....


 
Чапаев ©   (2007-03-13 07:52) [54]

> [53] Box   (13.03.07 01:11)
Оно поняло, с кем связалось... %-)


 
novill ©   (2007-03-13 09:26) [55]

> [53] Box   (13.03.07 01:11)

а ты все звуки в звуковой схеме включил?



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

Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.059 c
2-1174408150
MIV
2007-03-20 19:29
2007.04.08
Исходный код


15-1173963496
Рамиль
2007-03-15 15:58
2007.04.08
Вакансия. Помощник ситемного администратора (Москва)


15-1173955310
@!!ex
2007-03-15 13:41
2007.04.08
3D изображение не на плоскости


2-1173976988
Malik
2007-03-15 19:43
2007.04.08
Что за Word2000 в uses и где его взять?


2-1174070537
AlexeySiv
2007-03-16 21:42
2007.04.08
Считывание нажатия клавиши клавиатуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский