![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Приветствую, появилась проблема, поисковики ммало выдают требуемой инфы, вот и решил спросить у вас, создал 2 формы на winapi как было написанно на одном из листенгов для начинающих, но появилась загвоздка, 2 форму нада создавать только при нажатие кнопки, а что вместо месаги туда поставить, не пойму. Код вот
Код:
program WinApiWindows;
uses
Windows,
Messages;
const
HBTN = 1;
HLABEL = 2;
var
window: TWndClassex;
Form, Form1, Button, Label1: hwnd; //переменные для хендлов созданных объектов
mmsg: msg; // переменная для обработки сообщений
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;
WM_COMMAND:
begin
case LoWord( wParam ) of
HBTN: MessageBox(Form,'Вы нажали на кнопку','Загаловок',0);
end;
end;
else
result := defwindowproc(wnd,msg,wparam,lparam);
end;
end;
procedure CreateWinApiForm;
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:=1;
window.lpszmenuname := nil;
window.lpszclassname := 'main_window';
registerclassex(window);// регистрируем в системе новый класс окна
// создаем окно
Form:= createwindowex(0,'main_window','Hello World from WinApi', WS_OVERLAPPEDWINDOW,300,300,350,130,0,0,hinstance,nil);
Form1:= createwindowex(0,'main_window','Hello World from WinApi', WS_OVERLAPPEDWINDOW,300,300,350,130,0,0,hinstance,nil);
label1:=CreateWindow('static','Ты уже посмотрел на размер?',WS_VISIBLE or WS_CHILD or BS_TEXT,6,25,330,40,Form,HLABEL,hInstance,nil);
Button:=CreateWindow('button','Кликать сюда',WS_VISIBLE or WS_CHILD,6,73,110,25,Form,HBTN,hInstance,nil);
// показываем окно
ShowWindow(Form,SW_SHOW);
ShowWindow(Form1,SW_SHOW);
end;
begin
CreateWinApiForm;
while getmessage(mmsg,0,0,0) do
begin
translatemessage(mmsg); // переводит сообщения виртуальных клавиш в символьные сообщения
dispatchmessage(mmsg); // функция сообщения оконному обработчику событий, у нас это WindowProc
end;
end. |
|
#2
|
||||
|
||||
|
Ответа на вопрос не знаю но хотел бы спросить. А чем стандартное создание формы не понравилось? Так же на много меньше кода?
|
|
#3
|
|||
|
|||
|
vcl код систему сильно жрёт
|
|
#4
|
|||
|
|||
|
не надо, то, что у тебя получается достаточно большой исполняемый файл систему сильно не нагружает. А окно (любое) меньше 1,5 Мб в памяти все равно не будет, на чем ты не пиши.
|
|
#5
|
|||
|
|||
|
Используй KOL, он сильно экономит дисковое пространство.
|
|
#6
|
|||
|
|||
|
Ну, если хочется иметь маленький exe, то да, лучше KOL, чем WinAPI.
В вообще, можно просто упаковать получившийся exe с помощью какого-нить пакета, типа UPX или ASPack. Зато ты теряешь в удобстве разработки. На VCL просто рисуешь форму, на на WinAPI или KOL все тоже самое делаешь кодом. |
|
#7
|
|||
|
|||
|
за место :
Код:
MessageBox(Form,'Вы нажали на кнопку','Загаловок',0); Код:
ShowWindow(Form1,SW_SHOW); тут убрать: Код:
// показываем окно ShowWindow(Form,SW_SHOW); //ShowWindow(Form1,SW_SHOW); end; |