Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
ВнизВторое окно на API Найти похожие ветки
← →
demon © (2008-08-03 16:11) [0]Чтобы создать второе окно, написал процедуру :
procedure makePLWindow;
var
Wc: TWndClassEx;
Wnd: HWND;
Msg: TMsg;
begin
with Wc do
begin
cbSize := SizeOf( Wc );
style := CS_VREDRAW or CS_HREDRAW;
lpfnWndProc:= @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := hInstance;
hIcon := LoadIcon( 0, IDI_APPLICATION );
hCursor := LoadCursor( 0, IDC_ARROW );
hbrBackground := COLOR_WINDOW;
lpszMenuName := nil;
lpszClassName := "Tdp3PLWindow";
end;
RegisterClassEx( Wc );
Wnd := CreateWindowEx( 0,
"Tdp3PLWindow",
main.PLWindowName,
WS_CAPTION or WS_SYSMENU or WS_MINIMIZEBOX or WS_BORDER,
60,
60,
200,
700,
0,
0,
hInstance,
nil );
ShowWindow( Wnd, SW_SHOWNORMAL );
while GetMessage( Msg, 0, 0, 0 ) do
begin
TranslateMessage( Msg );
DispatchMessage( Msg );
end;
Halt( Msg.wParam );
end;
Но при вызове этой процедуры окно не появляеться. Если же убрать строку:
style := CS_VREDRAW or CS_HREDRAW;
то окно появляеться, но естественно, теряет свойство менять размеры.
В чем проблема?
← →
Юрий Зотов © (2008-08-03 19:58) [1]with Wc do
begin
...
hInstance := hInstance;
...
← →
demon © (2008-08-03 21:14) [2]Не поиню что поменял, но запустил, но без hInstance := hInstance; не работает.
Еще один вопрос. А как вызвать эту процедуру с текста программы? до этого я вызывал её с меню, а при попытке вызвать с другой процедуры, программа зависает.
← →
Юрий Зотов © (2008-08-03 22:04) [3]> demon © (03.08.08 21:14) [2]
1. Что и чему присваивается? Само себе?
2. Надо реализовать оконную функцию, а весь Ваш код поместить либо в dpr (убрав из него все остальное), либо в отдельный поток.
← →
Loginov Dmitry © (2008-08-03 22:59) [4]> Не поиню что поменял, но запустил, но без hInstance :=
> hInstance; не работает.
Заблуждаетесь. В данном случае переменной присваивается ее же значение, причем рандомное, т.к. поля структуры TWndClassEx обнулены не были. При вызове же CreateWindowEx() используется вполне определенное значение глобальной переменной hInstance, которое в общем случае не совпадает с TWndClassEx.hInstance. В результате могут быть различные эффекты, в том числе "окно то не появляется, то появляется" (hInstance очень важен, именно его Windows использует для поиска требуемого для CreateWindowEx() класса окна).
Рекомендую анализировать, чему равно Wnd после вызова фукнции CreateWindowEx(). Подозреваю, что там ноль.
← →
demon © (2008-08-03 23:33) [5]Счас окно нормально создаеться, я код подправил.
Запихнуть в dpr не получиться, там у меня создаётся первое окно программы.
Целый поток создавать для этого тоже както зажирно.
А если послать самому себе sendMessage и обработать его, это будет грамотно?
← →
demon © (2008-08-03 23:42) [6]Нет, sendMessage не прокатило, а с postmessage работает!
Потестирую, может появились какие подводные грабли...
← →
Loginov Dmitry © (2008-08-03 23:51) [7]> Запихнуть в dpr не получиться, там у меня создаётся первое
> окно программы.
оправдание
> А если послать самому себе sendMessage и обработать его,
> это будет грамотно?
?
> Нет, sendMessage не прокатило, а с postmessage работает!
это вообще про что?
← →
demon © (2008-08-04 00:00) [8]Ну, вместо того чтобы вызвать:
makePLWindow;
и повесить прогу, я сделал так:
postmessage(Handle,WM_COMMAND,12345,12345);
а в обработчике написал
.....
WM_COMMAND :
if (wParam = 12345) and (lParam = 12345) then makePLWindow;
....
← →
Юрий Зотов © (2008-08-04 00:07) [9]> demon © (04.08.08 00:00) [8]
У Вас в одном потоке появилось 2 цикла выборки сообщений - один из VCL, второй Ваш, причем второй не дает работать первому. Как Вы предполагаете решить этот конфликт, не создавая второго потока?
← →
Loginov Dmitry © (2008-08-04 00:19) [10]И я вот тоже что-то не пойму. В VCL уже есть цикл обработки оконных сообщений
зачем добавлять свой собственный цикл обработки? Без него не работает?
Самый главный вопрос: зачем извращаться с окнами на WinAPI при работе с VCL?
← →
demon © (2008-08-04 00:44) [11]У меня оба окна на API.
← →
Юрий Зотов © (2008-08-04 00:53) [12]> demon © (04.08.08 00:44) [11]
А тогда какие могут быть проблемы? Оба окна запихнуть в dpr, там же сделать их оконные функции и цикл выборки сообщений.
← →
demon © (2008-08-04 01:06) [13]Госпада! Всё работает отлично, оба обработчика функционируют, никаких глюков пока не видать. Как замечу глюк, так сразу паток создам.
← →
Юрий Зотов © (2008-08-04 01:17) [14]> demon © (04.08.08 01:06) [13]
Если Application не используется, то и второй поток не нужен. См. [12].
← →
Loginov Dmitry © (2008-08-04 07:52) [15]> Всё работает отлично, оба обработчика функционируют
точно оба? :)
← →
имя (2008-08-14 17:02) [16]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c