![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пример на языке С создание окна, помогите перевести строку [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 :=