Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WinApi: CreateWindow 
:(
    Опции темы
Ripper
Дата 29.1.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: нет
Всего: 23



Хочу сделать что-то наподобии VCL-овского TForm.
Я видел уже минимальную прогу на WinApi. Но тама одна форма создается.. а я хочу что то наподобии:
MyForm1:=TWindow.create;
MyForm1.top...
...
MyForm1.show;
MyForm2:=TWindow.create;
ну типа того... неполучется у меня создать объект.. я в ООП плохо разбираюсь...
Код

program test;
uses Windows, Messages;

type
TWindow = object
 FCaption:String;
 FWinName:String;
 FHandle: HWND;
 property Handle: HWND read FHandle write FHandle;
 property WinName: string read FWinName write FWinName;
 property caption: string read FCaption write FCaption;
 procedure Show;
 function MainWndProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall; export;
 constructor create;
 end;

constructor TWindow.create;
var wcx:TWndClass;
begin
   wcx.style := CS_HREDRAW or CS_VREDRAW;
   wcx.lpfnWndProc := @TWindow.MainWndProc;
   wcx.cbClsExtra := 0;
   wcx.cbWndExtra := 0;
   wcx.hInstance := hInstance;
   wcx.hIcon := LoadIcon(0, IDI_APPLICATION);
   wcx.hCursor := LoadCursor(0, IDC_ARROW);
   wcx.hbrBackground := COLOR_WINDOW;
   wcx.lpszMenuName :=  nil;
   wcx.lpszClassName := PChar(fWinName);

   RegisterClass(wcx);

   fHandle:= CreateWindow(
  PChar(fWinName),
  PChar(fcaption),
  WS_OVERLAPPEDWINDOW,
  Integer(CW_USEDEFAULT),
  Integer(CW_USEDEFAULT),
  Integer(CW_USEDEFAULT),
  Integer(CW_USEDEFAULT),
  0,
  0,
  hInstance,
  nil);
end;

function TWindow.MainWndProc(Window: HWnd; AMessage, WParam,
                   LParam: Longint): Longint; stdcall; export;
begin
 case AMessage of
   WM_DESTROY: halt;
   else
      Result := DefWindowProc(fhandle, AMessage, WParam, LParam);
 end;
end;

procedure TWindow.Show;
begin
ShowWindow(fhandle, CmdShow);
UpdateWindow(fhandle);
end;
var
wnd:TWindow;
GMes:msg;
h:hwnd;
begin

Wnd.caption:= 'lol';
Wnd.WinName:='gg';
Wnd.create;
Wnd.Show;

   while (GetMessage(GMes, 0, 0, 0)) do
   begin
     //Запускаем цикл обработки сообщений
     TranslateMessage(GMes);
     DispatchMessage(GMes);
   end;

end.

Только не пинайте smile


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
NiJazz
Дата 29.1.2005, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Цитата
Хочу сделать что-то наподобии VCL-овского TForm.

А зачем? smile
Сделай принтер наподобие HP 1200. smile
PM MAIL   Вверх
Ripper
Дата 29.1.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: нет
Всего: 23



Надо smile Во первых когда пишутся WinApi приложения неужеле стока процедур и кода пишется если допустим 5 форм в приложеннии
Во вторых просто интересно


Это сообщение отредактировал(а) Ripper - 29.1.2005, 18:57


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Burich-Caeser
Дата 15.2.2005, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 28.7.2004

Репутация: нет
Всего: 1



Посмотри
"Программирование на основе Win32 API в Delphi"
Автор: Николай Мазуркин

Там, вроде объясняется... Правда у меня так и не заработало=(((
--------------------
Ты брошен вниз силой судьбы,Ты унижен и раздавлен,Время забыть то, кем ты был,Но помнить, кем ты стал...
PM MAIL   Вверх
maxim1000
Дата 15.2.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



в Delphi, если мне не изменяет память объекты создаются так:
Код

Wnd=TWindow.Create;

потому как Wnd в начале программы указывает в никуда, и происходит попытка вызвать конструктор для объекта, расположенного как раз в этом "никуда"
Добавлено @ 16:54
ну и несколько мыслей/замечаний по поводу приведенного кода:
1. для нескольких окон такого типа, насколько я понял, будет использоваться один оконный класс (что вполне логично), однако, при в конструкторе (который будет вызываться при создании КАЖДОГО окна) опять происходит его регистрация, я, честно говоря, просто не знаю, как себя ведет RegisterClass при попытке зарегистрировать два класса с одинаковым именем, но на это место, по крайней мере, стоит обратить внимание
2. что касается оконной функции... а этот код вообще скомпилился? потому, как с одной стороны оконная функция представлена здесь, как метод класса, а с другой стороны передается, как обычная функция в RegisterClass... здесь надо бы использовать нечто более замысловатое, потому как когда оконная функция вызывается для обработки сообщения, она получает только handle окна, но никак ни адрес объекта, с которым оно связанно...



--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.