Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание собственного окошка сообщения. Как сделать что там все было свое? 
V
    Опции темы
Ner-zul
  Дата 25.7.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



   MessageDlg('Вы действительно хотите завершить работу?',mtConfirmation,[mbYes,mbNo],0)=mrYes then Close:=True;

Вот с помощью такого сообщения я спрашиваю у юзера , действительно он хочет закрыть приложение и выйти из него. Меня раздрожает , что у меня кнопки Yes/No вместо Да/Нет !!! Это не красиво и неудобно. Таким образом, мне хочеться знать как можно редактировать вид подобных сообщений окошек? чтобы сделать кнопки русскими, может  я вообще хочу еще 3 кнопки на него... я могу?
  или единственный вариант создавать новую форму????  
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
~FoX~
Дата 25.7.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Ner-zul, Можно все, но ИМХО овчинка выделки не стоит....месага это апишный контрол, т.е. уже написанный и упрятанный глубако в дебрях мастдая. 
Проще создать свое окошко и изголяться над ним. 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Matematik
Дата 25.7.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



см. MessageBox()

Добавлено @ 11:36 
Код

Close:=Application.MessageBox('Вы действительно хотите завершить работу?',
'Тупой вопрос',MB_YESNO or MB_ICONQUESTION)=idYES;
  

Это сообщение отредактировал(а) Matematik - 25.7.2006, 11:37
PM MAIL WWW ICQ   Вверх
Ner-zul
  Дата 25.7.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



хммммм.... 
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
Alexeis
Дата 25.7.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



а лучше
Код

  MessageBoxEx(0, 'message', 'caption',
  MB_YESNO    or MB_ICONINFORMATION or MB_DEFBUTTON2, LANG_RUSSIAN)

там и язык идет последним параметром. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ner-zul
Дата 25.7.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



ммм классная функция! то что надо! Только вот у меня почему то не срабатывает на русский я и хелп почитал, но мне ничего не дало... smile ... не знаете , почему на русский не переходит?? 
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
Snowy
Дата 25.7.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Вероятно потому, что в системе такой язык отсутствует... 
PM MAIL   Вверх
Ner-zul
Дата 25.7.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



хммм, что значит , что в системе такой язык отсутствует??? в какой системе? в винде??
 простите , а я на каком пишу?) 
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
Snowy
Дата 25.7.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Раскладка клавиатуры - не есть поддержка языка в винде.
Винда явно английская, раз выдаёт Yes/No.
Цитата
Before specifying a language identifier, you should enumerate the locales that are installed on a system. 
Поскольку не срабатывает, значит данная локаль в системе отсутствует. 
PM MAIL   Вверх
Akella
Дата 25.7.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



MessageDlg всегда выдёт Yes/No, а MessageBox выдаёт кнопки с надписями того языка который установлен в "Панель управления-Язык и региональные стандарты - закладка Региональные параметры" 
PM MAIL   Вверх
Ner-zul
Дата 25.7.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



Угу! Верно! Винда английская!
 И кстати та строчка есчо меня самого насторожила...
  а не знаете как поставить ту локаль ? Или это  систему надо русифицировать? Переставлять? 
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
Snowy
Дата 25.7.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Доставлять локаль конечному пользователю - дело неблагородное.
Просто создай формочку с кнопами Да/Нет и показывай её модально.
ЗЫ. MessageDlg почти так и сделан - разница только в том, что он не заранее спроектирован, а создаётся динамически. 
PM MAIL   Вверх
kostas
Дата 25.7.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Можно открыть уже конечный exe и в его ресурсах найти Yes/No и заменить соответственно на Да/Нет... конечно извратно но все же вариант smile 
PM ICQ   Вверх
Ner-zul
Дата 25.7.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 24.1.2004
Где: Москва

Репутация: нет
Всего: нет



На счет формочки я тоже так думал)
На счет exe  файла тож интересный вариант!

Всем спасибо, дальше я сам smile 
  
--------------------
 Ner-zul   
PM MAIL ICQ   Вверх
Snowy
Дата 25.7.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(kostas @  25.7.2006,  15:50 Найти цитируемый пост)
Можно открыть уже конечный exe и в его ресурсах найти Yes/No и заменить соответственно на Да/Нет...
Не получится.
Эти значения прописаны в самих виндах, а не в ехешнике. 
PM MAIL   Вверх
Yanis
Дата 25.7.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Snowy @  25.7.2006,  17:03 Найти цитируемый пост)
Эти значения прописаны в самих виндах, а не в ехешнике. 

Угу. В user32.dll вроде. 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
svarogik
Дата 25.7.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



А как по этому выскочившему окошку проверять можно ли закрывать программу,  это окошко что возвращает какие то значения? 
PM MAIL   Вверх
Snowy
Дата 25.7.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Читай справку по TForm.ShowModal
Yf выходе модальный результат.
Назначь нужный кнопкам. 
PM MAIL   Вверх
kostas
Дата 29.7.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 21.7.2006

Репутация: 3
Всего: 4



Цитата(Snowy @  25.7.2006,  16:03 Найти цитируемый пост)
Не получится.Эти значения прописаны в самих виндах, а не в ехешнике. 

а вот и нет, можешь попробовать сам smile этот способ работает, по крайней мере для MessageDlg 

Это сообщение отредактировал(а) kostas - 29.7.2006, 08:55
PM ICQ   Вверх
GRU
Дата 10.8.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



вот нашол. Протестируй ;)

Код

unit MyDialogs;

interface

uses
  Forms, Dialogs, StdCtrls;

  //----
  function MyMessageDlg(Msg: String; MsgDlgType: TMsgDlgType;
    Buttons: TMsgDlgButtons): Integer;
  procedure MyShowMessage(const Msg: string);
  procedure MyShowMessagePos(const Msg: string; X, Y: Integer);
  function MyMessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
    Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;

  function MyOpenDialog(Msg: String; MsgDlgType: TMsgDlgType;
    Buttons: TMsgDlgButtons): Integer;

implementation

function MyMessageDlg(Msg: String; MsgDlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons): Integer;

  function DialogCaption(DlgCaption: string): string;
  begin
    Result := DlgCaption;
    if DlgCaption = 'Warning' then Result := '1111';
    if DlgCaption = 'Error' then Result := '2222';
    if DlgCaption = 'Information' then Result := '3333';
    if DlgCaption = 'Confirm' then Result := '4444';
  end;

  function ButtonNames(ButtonName: string): string;
  begin
    Result := ButtonName;
    if ButtonName = 'Yes' then Result := '00';
    if ButtonName = 'No' then Result := '11';
    if ButtonName = 'OK' then Result := '22';
    if ButtonName = 'Cancel' then Result := '33';
    if ButtonName = 'Abort' then Result := '44';
    if ButtonName = 'Retry' then Result := '55';
    if ButtonName = 'Ignore' then Result := '66';
    if ButtonName = 'All' then Result := '77';
    if ButtonName = 'NoToAll' then Result := '88';
    if ButtonName = 'YesToAll' then Result := '99';
    if ButtonName = 'Help' then Result := 'AA';
  end;

  function StrCRLF(const StrMsg: string): string;
  var
    nLen, i: Integer;
  begin
    nLen := Length(StrMsg);
    i := 1;
    while (i <= nLen) do begin
      if StrMsg[i] in [';','~']
        then Result := Result + #13
        else Result := Result + StrMsg[i];
      Inc(i);
    end;
  end;

var
  CenterForm: Boolean;
  I: Integer;
  Btn: TButton;
  AForm: TForm;

begin
  CenterForm := {Form1 <> nil;}Screen.ActiveForm <> nil;
  AForm := Screen.ActiveForm;

  with CreateMessageDialog(StrCrLf(Msg), MsgDlgType, Buttons) do
  try
    if CenterForm
    then begin
      Left := AForm.Left + (AForm.Width div 2)-(Width div 2);
      Top := AForm.Top + (AForm.Height div 2)-(Height div 2);
      Caption := DialogCaption(Caption);
    end;

    for I := 0 to ComponentCount -1 do begin
      if Components[i] Is TButton
      then begin
        Btn := TButton(Components[I]) ;
        Btn.Caption := ButtonNames(Btn.Name);
      end;
    end;
    Result := ShowModal;
  finally
    Free;
  end;
end;

procedure MyShowMessage(const Msg: string);
begin
  MyShowMessagePos(Msg, -1, -1);
end;

procedure MyShowMessagePos(const Msg: string; X, Y: Integer);
begin
  MyMessageDlgPos(Msg, mtCustom, [mbOK], 0, X, Y);
end;

function MyMessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;
begin
  Result := MyMessageDlg(Msg, DlgType, Buttons);
end;

//---------------------------?????????---------------------------------------

function MyOpenDialog(Msg: String; MsgDlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons): Integer;

  function DialogCaption(DlgCaption: string): string;
  begin
    Result := DlgCaption;
    if DlgCaption = 'Warning' then Result := 'AA';
    if DlgCaption = 'Error' then Result := 'BB';
    if DlgCaption = 'Information' then Result := 'CC';
    if DlgCaption = 'Confirm' then Result := 'DD';
  end;

  function ButtonNames(ButtonName: string): string;
  begin
    Result := ButtonName;
    if ButtonName = 'Yes' then Result := '00';
    if ButtonName = 'No' then Result := '11';
    if ButtonName = 'OK' then Result := '22';
    if ButtonName = 'Cancel' then Result := '33';
    if ButtonName = 'Abort' then Result := '44';
    if ButtonName = 'Retry' then Result := '55';
    if ButtonName = 'Ignore' then Result := '66';
    if ButtonName = 'All' then Result := '77';
    if ButtonName = 'NoToAll' then Result := '88';
    if ButtonName = 'YesToAll' then Result := '99';
    if ButtonName = 'Help' then Result := 'AA';
    if ButtonName = 'Open' then Result := 'BB';
  end;

  function StrCRLF(const StrMsg: string): string;
  var
    nLen, i: Integer;
  begin
    nLen := Length(StrMsg);
    i := 1;
    while (i <= nLen) do begin
      if StrMsg[i] in [';','~']
        then Result := Result + #13
        else Result := Result + StrMsg[i];
      Inc(i);
    end;
  end;

var
  CenterForm: Boolean;
  I: Integer;
  Btn: TButton;
  AForm: TForm;

begin
  CenterForm := {Form1 <> nil;}Screen.ActiveForm <> nil;
  AForm := Screen.ActiveForm;
  
  with CreateMessageDialog(StrCrLf(Msg), MsgDlgType, Buttons) do
  try
    if CenterForm
    then begin
      Left := AForm.Left + (AForm.Width div 2)-(Width div 2);
      Top := AForm.Top + (AForm.Height div 2)-(Height div 2);
      Caption := DialogCaption(Caption);
    end;

    for I := 0 to ComponentCount -1 do begin
      if Components[i] Is TButton
      then begin
        Btn := TButton(Components[I]) ;
        Btn.Caption := ButtonNames(Btn.Name);
      end;
    end;
    Result := ShowModal;
  finally
    Free;
  end;
end;

end.


Это сообщение отредактировал(а) GRU - 10.8.2006, 23:17
PM MAIL   Вверх
Snowy
Дата 11.8.2006, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(kostas @  29.7.2006,  08:53 Найти цитируемый пост)
а вот и нет, можешь попробовать сам  этот способ работает, по крайней мере для MessageDlg 
MesageDlg - не есть WinAPI функция.
Строки для неё заложены в ресурсы ехешника.
А вот строки для MessageBox заложены в винду и зависят от её языка.
PM MAIL   Вверх
Snowy
Дата 11.8.2006, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



GRU, как-то это не очень компактно.
Проще так:
Код
var
  dlg: TForm;
begin
  dlg := CreateMessageDialog('А ты уверен?', mtConfirmation, [mbYes, mbNo]);
  (dlg.FindComponent('Yes') as TButton).Caption := 'Конечно';
  (dlg.FindComponent('No') as TButton).Caption := 'Не очень';
  if dlg.ShowModal = mrYes then ShowMessage('Он согласился!');
  dlg.Free;
end;

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1241 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.