Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно зарегистрировать класс? [D5]


Страницы:   1 2

ffo ©   (2006-08-28 00:21:00) 

Как мне правильно зарегистрировать класс BmpRgnWndClass?

procedure TForm1.Button1Click(Sender: TObject);
var
wndMain: hWnd;
w,h: DWORD;
wc : TWndClassEx;
begin
     With  wc do
begin
 cbSize:=sizeof(wc); style:=CS_HREDRAW or CS_VREDRAW;
 lpfnWndProc:=@WindowProc;
 cbClsExtra:=0; cbWndExtra:=0;
 hInstance:=hInstance; hIcon:=LoadIcon(0,IDI_APPLICATION);
 hCursor:=LoadCursor(0,IDC_ARROW); hbrBackground:=COLOR_BTNFACE+1;
 lpszMenuName:=nil; lpszClassName:='BmpRgnWndClass';
end;
 RegisterClassEx(wc);
 If RegisterClassEx(wc) = 0 then ShowMessage ('Класс не зарегистрирован');
 wndMain:= CreateWindow('BmpRgnWndClass', 'Программа', WS_POPUP, 10, 10, 100, 100, 0, 0,hInstance,nil);

 SetWindowPos(wndMain, hwnd_TopMost, 300, 0, 250, 70, SWP_NOACTIVATE );
//  ShowWindow( wndMain, CmdShow);
//  UpdateWindow (wndMain);
end;


Ketmar   (2006-08-28 13:54:00) [1]

> [21] ffo ©   (28.08.06 13:31)
йок... (ушёл думать о бренности земного)


ffo   (2006-08-28 13:31:00) [2]

У меня так сказать "тихая не регистрация", то есть ошибки нет не смотря на то, что в принципе в моем коде два раза запрашивается эта самая регистрация:
RegisterClassEx(wc);//первый раз
If RegisterClassEx(wc) = 0 then ShowMessage ('Класс не зарегистрирован');//второй раз
нет ошибки...нет регистрации


StriderMan   (2006-08-28 12:46:00) [3]


> Ketmar ©   (28.08.06 12:43) [19]
> а при чём тут дельфячьи классы? мы, вроде, о классах виндовых
> окон говорили...

... и правда... че это я.... :(


Ketmar   (2006-08-28 12:43:00) [4]

> [16] StriderMan ©   (28.08.06 12:23)
а при чём тут дельфячьи классы? мы, вроде, о классах виндовых окон говорили...


StriderMan   (2006-08-28 12:42:00) [5]

program MyProg;

....

begin

.....

initialization

 RegisterClass(TMyClass);

finalization

 UnRegisterClass(TMyClass);
end.


ffo   (2006-08-28 12:39:00) [6]

Здесь я не использую Dll. WindowProc находится просто в другом модуле.

Не будите ли вы так любезны показать как говорят в строке (т.е.кодом) хоть один из вариантов регистрации. Не умею я "где используешь -- туда и пихать".


StriderMan   (2006-08-28 12:23:00) [7]


> Ketmar ©   (28.08.06 12:15) [15]
> тогда туда, где первым создаётся. %-)

пусть, например, это будет экзешник. зарегистрил, че-то сделал.
теперь например в длл-ке нужно подгрузить компонент из потока. при попытке загрузки прилага ругнется типа Cannot Assign class TMyClass to class TMyClass. т.к. в длл и ехе это по-сути разные классы.


Ketmar   (2006-08-28 12:15:00) [8]

> [14] StriderMan ©   (28.08.06 12:06)
тогда туда, где первым создаётся. %-)


StriderMan   (2006-08-28 12:06:00) [9]


> Ketmar ©   (28.08.06 12:06) [13]
> где используешь -- туда и пихай. %-)

так я и там и сям использую :)


Ketmar   (2006-08-28 12:06:00) [10]

> [12] StriderMan ©   (28.08.06 12:03)
где используешь -- туда и пихай. %-)


StriderMan   (2006-08-28 12:03:00) [11]


> Ketmar ©   (28.08.06 12:02) [11]
> а кто мешает в .dpr вставить?

в dpr экзэшника или ДЛЛки?


Ketmar   (2006-08-28 12:02:00) [12]

> [10] StriderMan ©   (28.08.06 11:59)
а кто мешает в .dpr вставить?


StriderMan   (2006-08-28 11:59:00) [13]


> Ketmar ©   (28.08.06 01:26) [7]
> так вот самый простой способ исключить -- зарегистрировать
> всё в начале. %-)

в initialization? Согласин, подходит почтивсегда.

У меня такой вот косяк был: модуль, в котором описаны компоненты использовался и в EXE и в подцепляемой им DLL. регистрация была в initialization. Соответственно компоненты регились сначала ЕХЕшником, потом DLLкой, и получалась борода. пришлось регистрить непосредственно перед использованием, и потом сразу Un'регить.


Ketmar   (2006-08-28 10:13:00) [14]

> [8] ffo ©   (28.08.06 08:26)
точно так же, как и влюбом другом месте -- уверяю тебя, код не изменится.


ffo   (2006-08-28 08:26:00) [15]

Как зарегистрировать  все в начале?


Ketmar   (2006-08-28 01:26:00) [16]

> [6] Zeqfreed ©   (28.08.06 00:35)
так вот самый простой способ исключить -- зарегистрировать всё в начале. %-)


Zeqfreed   (2006-08-28 00:35:00) [17]

> [5] Ketmar ©   (28.08.06 00:33)

Ну не знаю, я бы все-таки предпочел регистрацию непосредственно перед использованием. Особенно, если выполнение может и не дойти до точки, где класс понадобится. Насчет повторной регистрации — такие случаи, разумеется, нужно исключать.


Ketmar   (2006-08-28 00:33:00) [18]

> [4] Zeqfreed ©   (28.08.06 00:31)
да никакой. но некрасиво. и чревато повторным регистрированием, что совершенно излишне.


Zeqfreed   (2006-08-28 00:31:00) [19]

> [3] Ketmar ©   (28.08.06 00:29)

А какая разница? :)
Может быть это секретная технология register-on-demand?


Ketmar   (2006-08-28 00:29:00) [20]

а зачем регистрировать класс где-то в ливере программы?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо