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

Вниз

Расширенные возможности 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.045 c
2-1172056986
Selected
2007-02-21 14:23
2007.03.11
Выделить файл


15-1171402248
Сергей_.
2007-02-14 00:30
2007.03.11
Fortran 77


15-1171349221
chvank
2007-02-13 09:47
2007.03.11
Photoshop


2-1171959942
Толибас
2007-02-20 11:25
2007.03.11
TdxDBGridLookupColumn


2-1171995551
abba
2007-02-20 21:19
2007.03.11
Как определить сколько файлов в папке?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский