Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.09.2010, 23:24
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию Создание дочерней формы при нажатие на кнопку на winapi

Приветствую, появилась проблема, поисковики ммало выдают требуемой инфы, вот и решил спросить у вас, создал 2 формы на winapi как было написанно на одном из листенгов для начинающих, но появилась загвоздка, 2 форму нада создавать только при нажатие кнопки, а что вместо месаги туда поставить, не пойму. Код вот
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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  
Старый 25.09.2010, 23:37
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Ответа на вопрос не знаю но хотел бы спросить. А чем стандартное создание формы не понравилось? Так же на много меньше кода?
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
  #3  
Старый 25.09.2010, 23:44
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

vcl код систему сильно жрёт
Ответить с цитированием
  #4  
Старый 26.09.2010, 03:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

не надо, то, что у тебя получается достаточно большой исполняемый файл систему сильно не нагружает. А окно (любое) меньше 1,5 Мб в памяти все равно не будет, на чем ты не пиши.
Ответить с цитированием
  #5  
Старый 26.09.2010, 18:54
ivann ivann вне форума
Прохожий
 
Регистрация: 29.08.2010
Сообщения: 16
Репутация: 10
По умолчанию

Используй KOL, он сильно экономит дисковое пространство.
Ответить с цитированием
  #6  
Старый 26.09.2010, 19:45
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, если хочется иметь маленький exe, то да, лучше KOL, чем WinAPI.
В вообще, можно просто упаковать получившийся exe с помощью какого-нить пакета, типа UPX или ASPack.

Зато ты теряешь в удобстве разработки. На VCL просто рисуешь форму, на на WinAPI или KOL все тоже самое делаешь кодом.
Ответить с цитированием
  #7  
Старый 27.09.2010, 09:30
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

за место :
Код:
1
MessageBox(Form,'Вы нажали на кнопку','Загаловок',0);
поставить:
Код:
1
ShowWindow(Form1,SW_SHOW);

тут убрать:
Код:
1
2
3
4
  // показываем окно
  ShowWindow(Form,SW_SHOW);
  //ShowWindow(Form1,SW_SHOW);
end;
__________________
Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025