Объясните пожалуйста, можно ли создать панель инструментов в окне прииложения созданного на Delphi средствами Win API - CreateWindowEx.
В описании говориться, что для создания панели инструментов без кнопок можно использовать функцию CreateWindowEx указывая имя класса окна TOOLBARCLASSNAME.
Подскажите как можно это сделать в приложении на Delphi.
Спасибо за ссылку. Изучаю, на данный момент панель управления получена и теперь нужно добавить кнопки на панель управления посредством отправки сообщения TB_ADDBUTTONS с указанием числа добавляемых кнопок и указателя на массив кнопок заданных структурой TTBBUTTON.
SendMessage(TlBar, TB_BUTTONSTRUCTSIZE, SizeOf(TlBarBtns) div SizeOf(TTBBUTTON), Integer(@TlBarBtns));
.
Пожалуйста подскажите, где ошибаюсь. Спасибо.
IUnknown
11.10.2011 16:49
Цитата
Пожалуйста подскажите, где ошибаюсь.
Без понятия. Взял стандартный пример чисто WinAPI-шного приложения из FPC (Дельфи запускать - лень), добавил то, о чем говорится в статье по ссылке и в твоем посте. Откомпилировал, запустил. Вот: Нажмите для просмотра прикрепленного файла
Без понятия. Взял стандартный пример чисто WinAPI-шного приложения из FPC (Дельфи запускать - лень), добавил то, о чем говорится в статье по ссылке и в твоем посте. Откомпилировал, запустил. Вот: Нажмите для просмотра прикрепленного файла
Больше Вам спасибо. Я начал сравнивать ваш код и свой и нашел - глупая ошибка, даже не знаю как сказать - невнимательность! Отправлял сообщение на добавление кнопок, до создания экземпляров кнопок.
Пожалуйста подскажите, как можно избежать перерисовки клиентской области окна при вызове диалоговых окон "Открыть" или "Сохранить" функциями GetOpenFileName и GetSaveFileName.
До вызова любого из диалоговых окон, родительское окно имеет вид:
то есть надпись Заготовка перерисовывается во все тех участках основного окна, куда было перемещено диалоговое окно. Надпись занимает свое исходное положение после изменения размера окна (стиль класса окна: CS_HRedraw or CS_VRedraw) или же при посылке сообщения WM_PAINT после закрытия диалогового окна.
IUnknown
24.10.2011 17:25
Не воспроизводится (WinXP SP3 + Dephi2009/FPC 2.4.4, проверял окном GetOpenFileName, тягал его во все стороны - не получилось добиться артефактов). Можешь прикрепить минимальный тестовый проект (просто отрисовка главного окна с надписью + запрос имени файла), который воспроизводит проблему? Чтоб можно было откомпилировать, запустить и посмотреть, есть ли проблема, и как от нее избавиться.
IKh
25.10.2011 0:16
Цитата(IUnknown @ 24.10.2011 23:25)
Не воспроизводится (WinXP SP3 + Dephi2009/FPC 2.4.4, проверял окном GetOpenFileName, тягал его во все стороны - не получилось добиться артефактов). Можешь прикрепить минимальный тестовый проект (просто отрисовка главного окна с надписью + запрос имени файла), который воспроизводит проблему? Чтоб можно было откомпилировать, запустить и посмотреть, есть ли проблема, и как от нее избавиться.
Вот текст, оставил отрисовку окна с надписью и вызов диалогового окна.
if InitCommonControl(ICC_BAR_CLASSES) = False then halt;
If RegisterClass(WindowClass) = 0 then Halt; MainWnd := CreateWindowEx(WS_EX_DLGMODALFRAME or WS_EX_WINDOWEDGE,AppName, 'Упражнение',WS_OVERLAPPEDWINDOW or WS_HSCROLL or WS_VSCROLL,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,0,0,HInstance,nil); ShowWindow(MainWnd,SW_SHOW);
{Прорисовка окна} DevCon := BeginPaint(hwnd, PaintStruct); DrawText(DevCon,PChar('Заготовка'),-1,PaintStruct.rcPaint, DT_SINGLELINE or DT_CENTER or DT_VCENTER); EndPaint(hwnd, PaintStruct);
Что это должно делать? PaintStruct.rcPaint, судя по MSDN, это:
Цитата
A RECT structure that specifies the upper left and lower right corners of the rectangle in which the painting is requested, in device units relative to the upper-left corner of the client area.
Мало ли, что запросит перерисовать система... Сообщение должно быть в центре окна, а не в центре перерисовываемой области:
WM_PAINT: begin {Прорисовка окна} DevCon := BeginPaint(hwnd, PaintStruct); GetClientRect(hwnd, Rc); DrawText(DevCon,PChar('Заготовка'),-1, Rc, DT_SINGLELINE or DT_CENTER or DT_VCENTER); EndPaint(hwnd, PaintStruct);
Exit; end;
IKh
25.10.2011 4:18
Спасибо! Ошибку понял.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.