Главная страница
    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.47 MB
Время: 0.04 c
15-1169041480
не очень
2007-01-17 16:44
2007.02.11
проводил собеседование


1-1166632036
dreamse
2006-12-20 19:27
2007.02.11
Ошибка загрузки иконок в разных OS


3-1163714813
dreamse
2006-11-17 01:06
2007.02.11
Помогите составить SQL запрос


2-1169565923
Альфи
2007-01-23 18:25
2007.02.11
Иконки


2-1169205482
_ozzy_
2007-01-19 14:18
2007.02.11
Числа пропистью





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский