Четверг, 15.04.2021, 02:18 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024  
delphicode » Delphi » Windows API в Delphi » Динамическое создание окна (формы)
Динамическое создание окна (формы)
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;

Спасибо. Кому надо кстати, ошибка (вдобавок) вылазила из за этой строки:
Code
FreeMem( p, n )

(убрал строку - ошибка пропала)


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

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
delphicode » Delphi » Windows API в Delphi » Динамическое создание окна (формы)
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2021 Хостинг от uCoz