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

Вниз

Расширенные возможности MessageDlg   Найти похожие ветки 

 
alexey_public ©   (2007-01-16 17:44) [0]

Недавно перейдя с Delphi 5 на Delphi 7 столкнулся в справке по MessageDlg несколько ее дополнительных вариантов вызова, эти варианты позволяли указывать заголовок окна, выбирать кнопки по умолчанию и собственную картинку. Именно необходимость использовать кнопки по умолчанию отличные от обычного интерфейса MessageDlg и заставила меня обратить внимание на данные функции. С виду все удобно и красиво. Но не тут то было.
Пройдя предварительно по интернету я убедился что вразумительных советов по использованию этих функций практически не встречается, варианты ответов доходили до полного отказа от всех перегруженных вариантов данной функции под Win и использование только в Linux, хотя в тексте самой функции видно, что она является кроссплатформенной.
Первое с чем столкнулся - это требование использовать CLX библиотеку, на практике это потребовало QDialog и библиотеки qtintf70.dll в папке программы, что не очень удобно. Но зато работают функции заголовка и кнопок.
Второе - это сами картинки. По умолчанию они используют объекты QBitmap из QGraphics. Но я использую несколько картинок и взял для этого обычный TImageList.
Напрямую соединить эти объекты не получается, и тогда я решил использовать обычный поток. По результатам эксперимента была составлена следующая функция:


 procedure ImageListToQBitMap(ImageList:TImageList; ImageIndex:integer; var QBitMap:QGraphics.TBitmap);
 var
   b:TBitmap;
   MS:TMemoryStream;
 begin
   b:=Graphics.TBitmap.Create;
   ImageList1.GetBitmap(ImageIndex,b);

   MS:=TMemoryStream.Create;
   b.SaveToStream(MS);
   MS.Position:=0;

   QBitMap:=QGraphics.TBitmap.Create;
   QBitMap.LoadFromStream(MS);
 end;


Эта функция из указанного по индексу изображения создает объект QBitmap, работа ее достаточно прозрачная, комментировать не буду.
Вызов функции осуществляется следующим образом:


var
 qb1:QGraphics.TBitmap;
begin
 ImageListToQBitMap(ImageList1,4,qb1);// выбрано 5-ое изображение из списка

Пример использования

     if  (MessageDlg("Внимание","Действительно удалить?",
                   mtCustom ,[mbOk,mbCancel],0, mbCancel , qb1)
          =mrOk)
    then .....

К бочке меда нужно приложить ложку дегтя - не получилось использовать картинки так, как задумывалось. На рабочей станции все работает, а вот при копировании приложения вместе с библиотекой qtintf70.dll на сервер под управлением Windows Server 2003 для работы в терминале под Citrix выяснилось, что картинки из ImageList не читаются, говорит неверный формат. Хотя туда были закачаны обычные Bitmap. Т.о. в моем случае мне пришлось ограничиться только текстом и кнопками. Но и это также неплохо.
Предоставляю это все на общее обозрение, критику и использование :-).
А если кто знает как включить и картинки - будет совсем хорошо :-)


 
alexey_public ©   (2007-01-16 17:47) [1]

Один момент - список uses желательно оформить следующим образом:

uses
 ...,
 QGraphics,
 Graphics,  // чтобы работали все остальные функции
 ...
 QDialogs;// Чтобы не надо было ссылаться на этот  модуль при вызове MessageDlg
 


 
vlad-mal ©   (2007-01-16 18:22) [2]

А не проще/быстрее просто:
 

>  TMyMsgDlg = class (TForm)
>

...настроить, все, что нужно, и использовать? :)


 
ors_archangel ©   (2007-01-17 03:42) [3]


>  QDialogs;// Чтобы не надо было ссылаться на этот  модуль
> при вызове MessageDlg

А как ты будешь ссылаться, если модуль не будет использоваться?


 
alexey_public ©   (2007-01-17 12:27) [4]


> ...настроить, все, что нужно, и использовать? :)

Согласен, но все же заставит работать стандартный MessageDlg было просто интересно ;-)


 
alexey_public ©   (2007-01-17 12:27) [5]


> ...настроить, все, что нужно, и использовать? :)

Согласен, но все же заставит работать стандартный MessageDlg было просто интересно ;-)


 
alexey_public ©   (2007-01-17 12:29) [6]


> А как ты будешь ссылаться, если модуль не будет использоваться?

Я имел в виду другое - порядок вызова, желательно его поставить последним в списке uses. Иначе придется писать:

QDialogs.MessageDlg(...)

Мелочь, но все-таки.



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

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

Наверх




Память: 0.49 MB
Время: 0.039 c
3-1166083953
cad2206
2006-12-14 11:12
2007.03.11
Помогите составить запрос


15-1171423587
Slider007
2007-02-14 06:26
2007.03.11
С днем рождения ! 14 февраля


2-1171715425
Hadroran
2007-02-17 15:30
2007.03.11
Refresh


6-1159851979
YurkaT
2006-10-03 09:06
2007.03.11
из памяти клиенту в браузер


4-1161778277
Den-63
2006-10-25 16:11
2007.03.11
Как установить время ВКЛЮЧЕНИЯ компа в БИОСе?