Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.04.2010, 18:37
beavi5 beavi5 вне форума
Прохожий
 
Регистрация: 13.04.2010
Сообщения: 49
Репутация: 12
По умолчанию API DELPHI 2009

работаю в делфи 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  
Старый 24.04.2010, 19:17
Аватар для urahara
urahara urahara вне форума
Новичок
 
Регистрация: 16.01.2010
Сообщения: 86
Репутация: 35
По умолчанию

работающий пример с 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.
__________________
Arrrgh
Ответить с цитированием
  #3  
Старый 24.04.2010, 20:01
beavi5 beavi5 вне форума
Прохожий
 
Регистрация: 13.04.2010
Сообщения: 49
Репутация: 12
По умолчанию

пасиба, пример ра6отает.) тока ошибку не могу найти.... вроде все свойства те же по сути.... хм
Ответить с цитированием
  #4  
Старый 24.04.2010, 21:39
beavi5 beavi5 вне форума
Прохожий
 
Регистрация: 13.04.2010
Сообщения: 49
Репутация: 12
По умолчанию

вот помогитей найти "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  
Старый 25.04.2010, 09:18
beavi5 beavi5 вне форума
Прохожий
 
Регистрация: 13.04.2010
Сообщения: 49
Репутация: 12
По умолчанию

всё.) нашёл оши6ку. спс за внимание.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter