|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi | создание окна и его элементов средствами WinAPI |
|
|
Delphi - Delphi | создание окна и его элементов средствами WinAPI
|
Старожил Сообщения: 300 |
Профиль | Сайт | Отправить PM | Цитировать Подскажите, в чем трабл...
........ handleWnd:=CreateWindow(myClassName, 'See a label below?', WS_OVERLAPPEDWINDOW,400,300,200,100,0,0,hInstance,nil); if handleWnd = 0 then begin // окно создается MessageBox(0,'Failed to create Window',nil,MB_OK); Exit; end; Label1:=CreateWindow('Label','See me?',WS_VISIBLE or WS_CHILD or WM_SETTEXT,10,10,60,23,handleWnd,0,hInstance,nil); if Label1 = 0 then begin // а текст нет :( MessageBox(0, 'Failed to create Label', nil, MB_OK); Exit; end; ........ |
|
Отправлено: 08:14, 17-01-2005 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать А Вы не забыли SS_LEFT какой-нибудь? Вместо WM_SETTEXT? А то WM_SETTEXT - это "сообщение", а не "стиль"
|
Отправлено: 09:03, 17-01-2005 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать hasherfrog
Thanks, это у меня заскок малец А проблема была в другом (Винда и с WM_SETTEXT все правильно создает): вместо Label1:=CreateWindow('Label','See me?',....) надо было Label1:=CreateWindow('STATIC','See me?',....) Это второй заскок |
Отправлено: 09:10, 17-01-2005 | #3 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Кстати, вот еще интересная ситуация. Во многих примерах я видел следующее:
У меня подобная конструкция приводит к тому, что окно после WM_DESTROY разрушается, а из цикла программа не выходит! Исправляю на GetMessage( lpMsg, 0, 0, 0 ) и все "ок". Кто-нибудь может это прокомментировать? |
Отправлено: 09:45, 17-01-2005 | #4 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Честно, я пока чего-то не догоняю, в чём проблема (не проснулся ещё ), но можете почитать тут описание по-русски
http://www.mini-soft.net.ru/msdn/glob_1.php потом Crtl+F GetMessage |
|
Отправлено: 09:56, 17-01-2005 | #5 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать hasherfrog
Да не, проблемы-то нет . Я просто указываю на то, что почти везде GetMessage() дается примерно в таком контексте А у меня почему-то подобная конструкция из цикла не выходит, когда окно с хендлом hWnd закрывается Цитата http://www.mini-soft.net.ru/msdn/glob_1.php:
ps: 1. Я и английский знаю 2. Не спал еще , отсюда и ляпы разные |
|
Отправлено: 10:07, 17-01-2005 | #6 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Дык а откуда взялся hWnd? Его кто инициализировал? И как? Дайте кусок текста.
|
Отправлено: 13:59, 17-01-2005 | #7 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 16:20, 17-01-2005 | #8 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Уважаемый mrcnn, я знаю, что "с нулём" (т.е. когда функция принимает все сообщения из потока) все отлично работает, гораздо более интересно, почему не работает с конкретным значением hWnd (т.е. когда функция принимает сообщения от данного окна).
Уважаемый hasherfrog, вот нарезка кода: var Msg: TMsg; // аналог MSG в Си handleWnd, Label1 : THandle; // аналог HWND в Си ......... handleWnd:=CreateWindow(myClassName,'See a label below?',WS_OVERLAPPEDWINDOW,0,0,200,100,hWndParent,0,hInstance,nil); if handleWnd = 0 then if MessageBox(0,'Failed to create Window'#13'Close Application?',nil,MB_TASKMODAL or MB_ICONWARNING or MB_OKCANCEL)=ID_OK then Exit; Label1:=CreateWindow('STATIC','See me?',WS_VISIBLE or WS_CHILD or WM_SETTEXT,10,10,60,23,handleWnd,0,hInstance,nil); if Label1 = 0 then if MessageBox(0,'Failed to create Label'#13'Close Application?',nil,MB_TASKMODAL or MB_ICONWARNING or MB_OKCANCEL)=ID_OK then Exit; ......... ShowWindow(handleWnd, SW_SHOW); UpdateWindow(handleWnd); while GetMessage(Msg, handleWnd, 0, 0) do begin // если вместо handleWnd поставить 0, то все отлично TranslateMessage(Msg); DispatchMessage(Msg); end; ......... |
Отправлено: 18:00, 17-01-2005 | #9 |
Новый участник Сообщения: 31
|
Профиль | Отправить PM | Цитировать Savant
Цитата:
|
|
------- Отправлено: 03:46, 18-01-2005 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Win32 API - Создание "сквозной" формы средствами WinAPI | garkin123 | Программирование и базы данных | 7 | 14-11-2009 23:41 | |
Delphi - WinApi||C++Builder(Delphi) SplashScreen в отдельном потоке? | XCodeR | Программирование и базы данных | 4 | 12-03-2007 19:51 | |
Delphi - *Флейм* | Delphi. Синтаксис. Использование WinAPI | DillerInc | Программирование и базы данных | 60 | 13-03-2006 21:36 | |
Delphi - Delphi, WinAPI | Корректное завершение программы | fossil | Программирование и базы данных | 6 | 10-08-2005 14:52 | |
Delphi - *Решено* | Использование WinAPI под Delphi | Savant | Программирование и базы данных | 2 | 14-01-2005 21:40 |
|