![]() |
|
|
#1
|
|||
|
|||
|
работаю в делфи 2009. написал обычное окно на API. Фигня в том что фон окна не закрашивается.
толи тут какаято фигня hbrBackground := GetStockObject (White_Brush); ... как не про6овал, фон оставался прозрачным. Толи делфи тупит, толи я.. Мож у кого чо подо6ное 6ыло?? вот весь код: Код:
program WinMin; uses Windows, Messages; const AppName = 'WinMin'; Var Window : HWnd; Message : TMsg; WindowClass : TWndClass; function WindowProc (Window : HWnd; Message, WParam : Word;LParam : LongInt) : LongInt; stdcall; begin WindowProc := 0; case Message of wm_Destroy : begin PostQuitMessage (0); Exit; end; end; WindowProc := DefWindowProc (Window, Message, WParam, LParam); end; begin with WindowClass do begin Style := cs_HRedraw or cs_VRedraw; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := 0; hIcon := LoadIcon (0, idi_Application); hCursor := LoadCursor (0, idc_Arrow); hbrBackground := GetStockObject (White_Brush); lpszMenuName := ''; lpszClassName := AppName; end; RegisterClass (WindowClass); Window := CreateWindow (AppName, 'Win_Min', 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; end. Последний раз редактировалось beavi5, 24.04.2010 в 21:33. |
|
#2
|
||||
|
||||
|
работающий пример с DelphiWorld:
Код:
program SmallPrg;
uses
Windows, Messages;
const
WinName = 'MainWClass';
function MainWndProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall;
begin
//подпрограмма обработки сообщений
case AMessage of
WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
Exit;
end;
else
Result := DefWindowProc(Window, AMessage, WParam, LParam);
end;
end;
function InitApplication: Boolean;
var
wcx: TWndClass;
begin
//Заполняем структуру TWndClass
// перерисовываем, если размер изменяется
wcx.style := CS_HREDRAW or CS_VREDRAW;
// адрес оконной процедуры
wcx.lpfnWndProc := @MainWndProc;
wcx.cbClsExtra := 0;
wcx.cbWndExtra := 0;
// handle to instance
wcx.hInstance := hInstance;
// загружаем стандандартную иконку
wcx.hIcon := LoadIcon(0, IDI_APPLICATION);
// загружаем стандартный курсор
wcx.hCursor := LoadCursor(0, IDC_ARROW);
// делаем светло-cерый фон
wcx.hbrBackground := COLOR_WINDOW;
// пока нет главного меню
wcx.lpszMenuName := nil;
// имя класса окна
wcx.lpszClassName := PChar(WinName);
// Регистрируем наш класс окна.
Result := RegisterClass(wcx) <> 0;
end;
function InitInstance: HWND;
begin
// Создаем главное окно.
Result := CreateWindow(
// имя класса окна
PChar(WinName),
// заголовок
'Small program',
// стандартный стиль окна
WS_OVERLAPPEDWINDOW,
// стандартные горизонтальное, вертикальное положение, ширина и высота
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,//нет родительского окна
0,//нет меню
hInstance, // handle to application instance
nil); // no window-creation data
end;
var
hwndMain: HWND;
AMessage: msg;
begin
if (not InitApplication) then
MessageBox(0, 'Ошибка регистрации окна', nil, mb_Ok)
else
begin
hwndMain := InitInstance;
if (hwndMain = 0) then
MessageBox(0, 'Ошибка создания окна', nil, mb_Ok)
else
begin
// Показываем окно и посылаем сообщение WM_PAINT оконной процедуре
ShowWindow(hwndMain, CmdShow);
UpdateWindow(hwndMain);
while (GetMessage(AMessage, 0, 0, 0)) do
begin
TranslateMessage(AMessage);
DispatchMessage(AMessage);
end;
end;
end;
end.
|
|
#3
|
|||
|
|||
|
пасиба, пример ра6отает.) тока ошибку не могу найти.... вроде все свойства те же по сути.... хм
![]() |
|
#4
|
|||
|
|||
|
вот помогитей найти "10 отличий".)
код правильно работающей программы Код:
program winmin; uses Windows, Messages; const AppName = 'WinMin'; var Window: HWND; Message: Tmsg; windowclass: TWndClass; function WindowProc(Window: HWnd; Message, WParam, LParam: Longint): Longint; stdcall; begin windowproc:=0; case Message of WM_DESTROY:begin PostQuitMessage(0); Exit; end; end; windowproc := DefWindowProc(Window, Message, WParam, LParam); end; begin with windowclass do begin style := CS_HREDRAW or CS_VREDRAW; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := 0; hIcon := LoadIcon(0, IDI_APPLICATION); hCursor := LoadCursor(0, IDC_ARROW); hbrBackground := GetStockObject (White_Brush); lpszMenuName := ''; lpszClassName := AppName; end; RegisterClass(windowclass) ; Window:= CreateWindow (AppName,'Win_Min',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; end. код неправильно работающей программы Код:
program WinMin; uses Windows, Messages; const AppName = 'WinMin'; Var Window : HWnd; Message : TMsg; WindowClass : TWndClass; function WindowProc (Window : HWnd; Message, WParam : Word;LParam : LongInt) : LongInt; stdcall; begin WindowProc := 0; case Message of wm_Destroy : begin PostQuitMessage (0); Exit; end; end; WindowProc := DefWindowProc (Window, Message, WParam, LParam); end; begin with WindowClass do begin Style := cs_HRedraw or cs_VRedraw; lpfnWndProc := @WindowProc; cbClsExtra := 0; cbWndExtra := 0; hInstance := 0; hIcon := LoadIcon (0, idi_Application); hCursor := LoadCursor (0, idc_Arrow); hbrBackground := GetStockObject (White_Brush); lpszMenuName := ''; lpszClassName := AppName; end; RegisterClass (WindowClass); Window := CreateWindow (AppName, 'Win_Min', 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; end. *крыша едит..* Последний раз редактировалось beavi5, 24.04.2010 в 21:44. |
|
#5
|
|||
|
|||
|
всё.) нашёл оши6ку. спс за внимание.
|