Форум: "Основная";
Текущий архив: 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.04 c