Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пример на языке С создание окна, помогите перевести строку [D7, XP]


allucard ©   (2007-05-16 13:57:00) 

Сабж.

w: переменная типа WNDCLASS;

1. memset(&w,0,sizeof(WNDCLASS));
2. w.hbrBackground = GetStockBrush(WHITE_BRUSH);
3. RegisterClass(&w);

4. while(GetMessage(&msg,NULL,0,0))
{
 TranslateMessage(&msg);
 DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wparam,LPARAM lparam)
{
if (Message == WM_DESTROY )
{
 PostQuitMessage(0);
 return 0;
}
return DefWindowProc(hwnd,Message,wparam,lparam);
}


Спасибо.


Сергей М.   (2007-05-21 09:17:00) [1]


> allucard   (18.05.07 08:56) [15]


Windows.RegisterClass(..);

Учи Паскаль.


allucard   (2007-05-21 08:19:00) [2]

Народ, подскажите как класс зарегить?

w типа WNDCLASS;

а RegisterClass(w);вызывает ошибку Incompatible types: 'TPersistentClass' and 'tagWNDCLASSA'.

Спасибо.


allucard   (2007-05-18 08:56:00) [3]


> Сергей М. ©   (17.05.07 16:22) [14]

)))
Incompatible types: 'TPersistentClass' and 'tagWNDCLASSA'


Сергей М.   (2007-05-17 16:22:00) [4]


> Какой может быть выход?


Выход один - учить Паскаль.

Если w - это WNDCLASS, то никаких "баранов"-префиксов перед этим параметром быть не должно.


allucard   (2007-05-17 15:39:00) [5]

Ок. Всё пошло.

Только RegisterClass(@w); вызывает Access Violation.

Наверное эти функции в С и Дельфи отличаются?
Какой может быть выход?


clickmaker   (2007-05-17 09:30:00) [6]


> аналог на дельфи функции

это макрос
GetStockObject()


allucard   (2007-05-17 09:12:00) [7]

Какой аналог на дельфи функции

GetStockBrush(WHITE_BRUSH);

Полная строка w.hbrBackground = GetStockBrush(WHITE_BRUSH);

?


allucard   (2007-05-17 09:09:00) [8]

Разобрался, WndProc оказывается есть у класса TCustomForm.
Просто поменял имя - работает.


allucard   (2007-05-17 08:37:00) [9]

В подчёркнутой строке Variable required, почему?

 function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT;  stdcall;

function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT;    stdcall;
begin
if (Message = WM_DESTROY) then
begin
  PostQuitMessage(0);
  Result := 0;
  Exit;
end;
Result := DefWindowProc(hwnd, Message, wparam, lparam);
end;


procedure TForm2.Button5Click(Sender: TObject);
Var
H: HWND;
M: MSG;
W: WNDCLASS;
begin
ZeroMemory(@W, SizeOf(WNDCLASS));
W.style := CS_HREDRAW or CS_VREDRAW;

W.lpfnWndProc := @WndProc;

end;


clickmaker   (2007-05-16 16:23:00) [10]


> [7] allucard   (16.05.07 16:11)
> Просто функция???

function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;


allucard   (2007-05-16 16:11:00) [11]

Просто функция???

Всем спасибо.


stakan   (2007-05-16 15:42:00) [12]


> Как это интерпретировать:
>
> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);
>
> LRESULT CALLBACK WndProc(HWND:hwnd, UINT:Message, WPARAM:
> wparam, LPARAM:lparam);
> begin
>    if (Message = WM_DESTROY) then
>      begin
>        PostQuitMessage(0);
>        Result := 0;
>      end;
>  Result := DefWindowProc(hwnd,Message,wparam,lparam);
> end;
>


function WndProc(hwnd: HWND; Message: UINT; wparam: WPARAM; lparam: LPARAM): LRESULT;
begin
 if (Message = WM_DESTROY) then
 begin
   PostQuitMessage(0);
   Result := 0;
   Exit;
 end;
 Result := DefWindowProc(hwnd, Message, wparam, lparam);
end;


allucard   (2007-05-16 15:05:00) [13]

Как это интерпретировать:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM,LPARAM);

LRESULT CALLBACK WndProc(HWND:hwnd, UINT:Message, WPARAM:wparam, LPARAM:lparam);
begin
   if (Message = WM_DESTROY) then
     begin
       PostQuitMessage(0);
       Result := 0;
     end;
 Result := DefWindowProc(hwnd,Message,wparam,lparam);
end;


не могу интерпретировать только описание процедуры?


clickmaker   (2007-05-16 14:38:00) [14]


> какой аналог?

FillChar, ZeroMemory


allucard   (2007-05-16 14:18:00) [15]


> clickmaker ©   (16.05.07 14:13) [1]

Понял.

но функции memset нет в Delphi, какой аналог?


Anatoly Podgoretsky   (2007-05-16 14:17:00) [16]

> clickmaker  (16.05.2007 14:13:01)  [1]

> return  => Result :=

return  => Result := ...; Exit; ?


clickmaker   (2007-05-16 14:13:00) [17]

=  =>  :=
&  =>  @ (если функция продекларирована с аргументом-указателем, а не var)
==  =>  =
{   => begin
}   => end;
return  => Result :=


Наверх

Титульная страница Поиск, карта сайта Написать письмо