Динамическое создание окна (формы)
| |
gravitas | Дата: Среда, 08.12.2010, 22:26 | Сообщение # 1 |
Авторитетный
Зарегистрирован: 01.05.2010
Группа: Пользователи
Сообщений: 385
Статус: Offline
| Возник вопрос по поводу динамического создания компонентов. Вопрос таков: в чем ошибка, и почему окно все равно не поверх всех? Код: Code Program Api; uses windows,messages;
var window:TWndClassEx; Mwindow: HWND; Mmsg: MSG; Edit: HWND; Buttons: array[0..8] of HWND; Icon: HICON; Font: HFONT;
const BTN_TEXT_0 = 6; EditID = 1; WND_STYLE = WS_OVERLAPPEDWINDOW or WS_VISIBLE or WS_EX_TOPMOST ;
// Процедура обработки сообщений function WindowProc (wnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LRESULT;STDCALL; begin case msg of WM_Destroy: begin PostQuitMessage (0); Result := 0; Exit; end; else Result := DefWindowProc(wnd,msg,wparam,lparam); end; end;
// Ристрация класса окна begin window.cbSize := sizeof (window); window.style := CS_HREDRAW or CS_VREDRAW; window.lpfnWndProc := @WindowProc; window.cbClsExtra := 0; window.cbWndExtra := 0; window.hInstance := HInstance; window.hIcon := LoadIcon (0,IDI_APPLICATION); window.hCursor := LoadCursor (0,IDC_ARROW); window.hbrBackground:=Color_BtnFace+4; window.lpszMenuName := nil; window.lpszClassName := 'Main_Window'; RegisterClassEx (window); Mwindow := CreateWindowEx(0,'Main_Window','First_WinAPI_Programm', wnd_style ,100,100,300,300,0,0,Hinstance,nil); //окно SHOWWINDOW (Mwindow,SW_Show);
Buttons[6] := CreateWindowEx( WS_EX_STATICEDGE, 'Button', 'Я, кнопка', WS_VISIBLE or WS_CHILD, //кнопка 1, 1, 100, 25, mwindow, BTN_TEXT_0, hInstance, nil ); Font := GetStockObject( ANSI_VAR_FONT ); SendMessage( Buttons[6], WM_SETFONT, Font, 0 );
Edit := CreateWindowEx( WS_EX_CLIENTEDGE, 'Edit', 'Текстовое поле', // Текстовое поле ES_AUTOHSCROLL or WS_CHILD or WS_VISIBLE, 1, 40, 150, 20, mwindow, EditID, hInstance, nil ); SendMessage( Edit, WM_SETFONT, GetStockObject( ANSI_VAR_FONT ), 0 );
// Цикл обработки сообщений while GetMessage (Mmsg,0,0,0) do begin TranslateMessage (Mmsg); DispatchMessage (Mmsg); end; end. Тоже самое и с созданием формы во всю щирину экрана (WND_STYLE). Вобщем в чем дело и как исправить...
TheDeduction Для ускорения получения ответов на ваши вопросы рекомендуется подкармливание в виде +'ов в рейтинг :)
|
|
| |
dolphin | Дата: Четверг, 09.12.2010, 12:01 | Сообщение # 2 |
Администратор
Сообщений: 906
Статус: Offline
| Mwindow := CreateWindowEx(0,'Main_Window','First_WinAPI_Programm', wnd_style ,100,100,300,300,0,0,Hinstance,nil); //окно в этой строке меняем Доступно только для пользователей Окно по верх всех
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
gravitas | Дата: Четверг, 09.12.2010, 14:02 | Сообщение # 3 |
Авторитетный
Зарегистрирован: 01.05.2010
Группа: Пользователи
Сообщений: 385
Статус: Offline
| Quote (dolphin) Mwindow := CreateWindowEx(0,'Main_Window','First_WinAPI_Programm', wnd_style ,100,100,300,300,0,0,Hinstance,nil); //окно в этой строке меняем Доступно только для пользователейпервый параметр на 8 получаем Mwindow := CreateWindowEx(8,'Main_Window','First_WinAPI_Programm', wnd_style ,100,100,300,300,0,0,Hinstance,nil); //окно Окно по верх всех ++ . А теперь как сделать его во весь экран?
TheDeduction Для ускорения получения ответов на ваши вопросы рекомендуется подкармливание в виде +'ов в рейтинг :)
|
|
| |
C@T | Дата: Четверг, 09.12.2010, 19:45 | Сообщение # 4 |
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
| GetWindowRect(GetDesktopWindow,Rec);//Rec это переменная типа Trect Mwindow := CreateWindowEx(8,'Main_Window','First_WinAPI_Programm', WS_VISIBLE or WS_POPUP ,rec.Left,rec.Top,rec.Right,rec.Bottom,0,0,Hinstance,nil);//WS_POPUP анлогично Form1.BorderStyle := bsNone;
|
|
| |
gravitas | Дата: Четверг, 09.12.2010, 22:50 | Сообщение # 5 |
Авторитетный
Зарегистрирован: 01.05.2010
Группа: Пользователи
Сообщений: 385
Статус: Offline
| Продолжаю спрашивать... Решил вывести содержимое динамически созданного едита в mess box. Пробовал так: Code BTN_TEXT_0: begin GetWindowText(Edit, pchar(login), 255); MessageBox(Wnd, pchar(login ), 'Edit:', MB_OK ); FreeMem( p, n ) end else Result := DefWindowProc( Wnd, Msg, wParam, lParam ); end; Результат - пустой mess box, да еще и ошибка какая то лезет...
TheDeduction Для ускорения получения ответов на ваши вопросы рекомендуется подкармливание в виде +'ов в рейтинг :)
|
|
| |
C@T | Дата: Пятница, 10.12.2010, 16:35 | Сообщение # 6 |
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
| поменяй тип переменной login login: array [0..255] of char;
|
|
| |
gravitas | Дата: Пятница, 10.12.2010, 16:39 | Сообщение # 7 |
Авторитетный
Зарегистрирован: 01.05.2010
Группа: Пользователи
Сообщений: 385
Статус: Offline
| Quote (C@T) поменяй тип переменной login login: array [0..255] of char; Спасибо. Кому надо кстати, ошибка (вдобавок) вылазила из за этой строки: (убрал строку - ошибка пропала)
TheDeduction Для ускорения получения ответов на ваши вопросы рекомендуется подкармливание в виде +'ов в рейтинг :)
|
|
| |
dolphin | Дата: Пятница, 10.12.2010, 18:51 | Сообщение # 8 |
Администратор
Сообщений: 906
Статус: Offline
| Quote (gravitas) FreeMem( p, n ) Память освобождаешь, не выделив её Это вредо возможно только после getmem
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
|