Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.045 c
3-1163750618
AlexSt
2006-11-17 11:03
2007.02.11
Отслеживание изменений другим пользователем


15-1169375293
syte_ser78
2007-01-21 13:28
2007.02.11
как распаковать tar.qz ?


15-1169546778
Сало
2007-01-23 13:06
2007.02.11
Маразм по-харьковски


2-1169635413
qwert55
2007-01-24 13:43
2007.02.11
Получение целой части


2-1169630947
распечатчик
2007-01-24 12:29
2007.02.11
Работа с принтером