Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизПустое окно с WinApi Найти похожие ветки
← →
ZiTrAX (2006-09-30 00:21) [0]Этот вопрос уже поднимался, но ответа я там не увидел. Поэтому спрашиваю ещё раз.
Имеется кодprogram WinXPGluk;
uses Windows,Messages;
const AppName = "Gluk_WinXP:(";
Var Window : HWnd;Message : TMsg;WindowClass : TWndClass;
function WindowProc (Window : HWnd; Message, WParam : Word;
LParam : LongInt) : LongInt; stdcall;
begin
FillChar(WindowClass, SizeOf(WindowClass), 0);
WindowProc := 0;
case Message of
wm_Destroy : begin PostQuitMessage (0);Exit;end;
end; // case
WindowProc := DefWindowProc (Window, Message, WParam, LParam);
end;
begin
with WindowClass do begin
Style := cs_HRedraw + cs_VRedraw;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := LoadIcon (0, idi_Application);
hCursor := LoadCursor (0, idc_Arrow);
hbrBackground := CreatesolidBrush(GetSysColor(Color_btnface));
lpszMenuName := "";
lpszClassName := AppName;
end;
If RegisterClass (WindowClass) = 0 then Halt (255);
Window := CreateWindow (AppName, "Глюк", ws_OverlappedWindow,
cw_UseDefault, cw_UseDefault,
cw_UseDefault, cw_UseDefault,
0, 0, HInstance, nil);
ShowWindow (Window, CmdShow);
UpdateWindow (Window);
while GetMessage (Message, 0, 0, 0) do begin
TranslateMessage (Message);DispatchMessage (Message);
end;
Halt (Message.wParam);
end.
Скомпилированное окно себя не перерисовывает. Если этот код скомпилировать FreePascal или TMT Pascal - результат тот же. Но аналогичные коды, входящие в поставку названных компиляторов, выдают нормальные окна. Сравнивал эти коды - принципиальной разницы нет. Так в каком месте спрятана эта ошибка? Ошибкой в компиляторе это быть не может (по вышеназванным причинам). А в коде я не могу найти ошибки.
ПОМОГИТЕ!!!
← →
Орион © (2006-09-30 00:25) [1]> Так в каком месте спрятана эта ошибка?
вот в этом:
> Сравнивал эти коды - принципиальной разницы нет.
ЗЫ:
> program WinXPGluk
А что за программка будет, если не секрет?
CD-ром открывать/закрывать будет?
← →
ZiTrAX (2006-09-30 00:34) [2]
> А что за программка будет, если не секрет?
> CD-ром открывать/закрывать будет?
Нет.Для этого окно не нужно.
Просто хочу написать шаблон окна на Delphi+WinApi. А не получается.
Так кто-нибудь сталкивался с подобной проблемой? И как её решить?
← →
Орион © (2006-09-30 00:54) [3]
program Virus;
uses
Windows, Messages;
var
WndClass: TWndClassEx;
Message: TMsg;
function WindowProc(Window: THandle; Msg, wParam, lParam: Integer): Integer; stdcall;
begin
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0);
Result:=0;
Exit;
end else Result:=DefWindowProc(Window, Msg, wParam, lParam);
end;
end;
begin
WndClass.cbSize:=SizeOf(TWndClassEx);
WndClass.Style:=CS_HREDRAW or CS_VREDRAW;
WndClass.lpfnWndProc:=@WindowProc;
WndClass.cbClsExtra:=0;
WndClass.cbWndExtra:=0;
WndClass.hInstance:=hInstance;
WndClass.hIcon:=LoadIcon(0, IDI_APPLICATION);
WndClass.hCursor:=LoadCursor(0,idc_arrow);
WndClass.hbrBackground:=COLOR_BTNFACE+1;
WndClass.lpszMenuName:=nil;
WndClass.lpszClassName:="Virus";
RegisterClassEx(WndClass);
CreateWindowEx(0, "Virus", "Virus", WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, 0, 0, hInstance, nil);
while GetMessage(Message, 0, 0, 0) do
begin
TranslateMessage(Message);
DispatchMessage(Message);
end;
end.
← →
ZiTrAX (2006-09-30 01:05) [4]Всё, проблема решена!
← →
Eraser © (2006-09-30 01:28) [5]> [0] ZiTrAX (30.09.06 00:21)
> WindowProc (Window : HWnd; Message, WParam : Word;
> LParam : LongInt)
принципиальная ошибка.
вот рабочий пример вашей программы:program WinXPGluk;
uses
Windows,
Messages, Dialogs, SysUtils;
const
AppName = "GlukWinXP";
var
Window: HWnd;
MsgGlobal: Msg;
WindowClass: TWndClass;
function WindowProc(hWnd: HWND;
Msg, wParam, lParam: Cardinal): Longint; stdcall;
begin
Result := 0;
case Msg of
WM_DESTROY:
begin
PostQuitMessage(0);
Exit;
end;
else
Result := DefWindowProc(hWnd, Msg, wParam, lParam);
end;
end;
begin
FillChar(WindowClass, SizeOf(TWndClass), 0);
with WindowClass do
begin
Style := CS_HREDRAW or CS_VREDRAW;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hIcon := LoadIcon(0, IDI_APPLICATION);
hCursor := LoadCursor(0, idc_Arrow);
hbrBackground := CreatesolidBrush(GetSysColor(Color_btnface));
lpszMenuName := nil;
lpszClassName := AppName;
end;
if RegisterClass(WindowClass) = 0 then
Halt(255);
Window := CreateWindow(AppName, "Test", WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0, 0, HInstance, nil);
if Window = 0 then
Halt;
ShowWindow(Window, SW_SHOWNORMAL);
UpdateWindow(Window);
while GetMessage(MsgGlobal, 0, 0, 0) do
begin
TranslateMessage(MsgGlobal);
DispatchMessage(MsgGlobal);
end;
end.
жирным я выделил те места, которые в вашем коде могли бы привести к ошибкам.
и вот еще что! оформляйте код согласно какому-либо общепринятому стандарту, желетельно стандарту VCL.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=802
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.04 c