![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно зарегистрировать класс? [D5]
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]а зачем регистрировать класс где-то в ливере программы?