Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.01.2012, 20:27
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию Строим Message

Вообщем проблема в том что я не знаю как создать собственное окно сообщения с нужным мне заголовком, текстом, кнопками.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Msg: Integer;
begin
Msg := MessageDlg('Custom dialog',mtCustom, [mbYes,mbNo], 0);
if Msg = mrYes then PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
if Msg = mrNo  then ShowMessage('No');
end;
Пример есть. Но! Здесь кроме текста сообщения ничего (текстового) нельзя изменить. Тот же заголовок и кнопки Да/Нет. Возможно нужно пользоваться чем-то другим?
Ответить с цитированием
  #2  
Старый 06.01.2012, 21:37
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

В Дельфи юнит Dialogs.pas, смотрим класс InputQuery и переделываем под себя.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 06.01.2012, 22:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,050
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, фактически там просто Custom-форма создается динамически, а MessageDlg вызывает функцию WinAPI. Куда, кстати, тоже можно много чего накидать/изменить, но это сложно и долго. Быстрее просто создать свою форму, что я собственно и сделал, создавай аналог MessageDlg, выглядящий как в Win7.
Ответить с цитированием
  #4  
Старый 06.01.2012, 23:15
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Вообщем получается проще создать новую форму с нужным стилем и т.п.
Ответить с цитированием
  #5  
Старый 06.01.2012, 23:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну и, наверное, желательно создавать её универсальной, чтобы можно было на "лету" менять какие-то параметры.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 07.01.2012, 15:23
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Это как на "лету" ?
Не вписывать туда значения, а создавать их при запуске?
Ответить с цитированием
  #7  
Старый 07.01.2012, 18:18
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

То есть свой текст, заголовок и кнопки. В Джаве кстати есть такая фича - CustomDialogBox вроде. можно не только свой текст и заголовок, но и тексты кнопок (и их количество) функция возвращает номер кнопки
Ответить с цитированием
  #8  
Старый 07.01.2012, 22:19
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Вот нашел неплохой пример:
Код:
Application.MessageBox('Текст сообщения','Заголовок', mb_iconwarning or mb_ok);
Ответить с цитированием
  #9  
Старый 08.01.2012, 12:22
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

MessageBox function
Цитата:
int WINAPI MessageBox(
__in_opt HWND hWnd,
__in_opt LPCTSTR lpText,
__in_opt LPCTSTR lpCaption,
__in UINT uType
);
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 08.01.2012, 12:39
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Как вариант, чем Вам не подходит?
Код:
var I:integer;
begin
  with CreateMessageDialog('message', mtConfirmation, [mbYes, mbCancel]) do
    try
    for i := 0 to componentcount - 1 do begin
       if components[i].classname = 'TButton' then
          if (components[i] as TButton).modalResult = mrYes then
            (components[i] as TButton).caption := 'A';

       if components[i].classname = 'TButton' then
          if (components[i] as TButton).modalResult = mrcancel then
            (components[i] as TButton).caption := 'B';
    end;
      Caption := 'aaa';
      ShowModal;
    finally
      Release;
    end;
Просто заменяем заголовки кнопок.
События отлавливай через ShowModal.
__________________
Помогаю за Спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:21.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter