Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
ВнизКак правильно зарегистрировать класс? Найти похожие ветки
← →
ffo © (2006-08-28 00:21) [0]Как мне правильно зарегистрировать класс 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;
← →
Zeqfreed © (2006-08-28 00:26) [1]Не сомневаюсь, что при повторной попытке зарегистрировать класс тебе возвращают 0. Почитал бы что говорит GetLastError, наверное что-то полезное.
← →
guav © (2006-08-28 00:26) [2]> hInstance:=hInstance;
Это пример о "вреде" with.
hInstance:=SysInit.hInstance
Возможно это не всё, что GetLastError говорит проверять надо.
← →
Ketmar © (2006-08-28 00:29) [3]а зачем регистрировать класс где-то в ливере программы?
← →
Zeqfreed © (2006-08-28 00:31) [4]> [3] Ketmar © (28.08.06 00:29)
А какая разница? :)
Может быть это секретная технология register-on-demand?
← →
Ketmar © (2006-08-28 00:33) [5]> [4] Zeqfreed © (28.08.06 00:31)
да никакой. но некрасиво. и чревато повторным регистрированием, что совершенно излишне.
← →
Zeqfreed © (2006-08-28 00:35) [6]> [5] Ketmar © (28.08.06 00:33)
Ну не знаю, я бы все-таки предпочел регистрацию непосредственно перед использованием. Особенно, если выполнение может и не дойти до точки, где класс понадобится. Насчет повторной регистрации — такие случаи, разумеется, нужно исключать.
← →
Ketmar © (2006-08-28 01:26) [7]> [6] Zeqfreed © (28.08.06 00:35)
так вот самый простой способ исключить -- зарегистрировать всё в начале. %-)
← →
ffo © (2006-08-28 08:26) [8]Как зарегистрировать все в начале?
← →
Ketmar © (2006-08-28 10:13) [9]> [8] ffo © (28.08.06 08:26)
точно так же, как и влюбом другом месте -- уверяю тебя, код не изменится.
← →
StriderMan © (2006-08-28 11:59) [10]
> Ketmar © (28.08.06 01:26) [7]
> так вот самый простой способ исключить -- зарегистрировать
> всё в начале. %-)
в initialization? Согласин, подходит почти всегда.
У меня такой вот косяк был: модуль, в котором описаны компоненты использовался и в EXE и в подцепляемой им DLL. регистрация была в initialization. Соответственно компоненты регились сначала ЕХЕшником, потом DLLкой, и получалась борода. пришлось регистрить непосредственно перед использованием, и потом сразу Un"регить.
← →
Ketmar © (2006-08-28 12:02) [11]> [10] StriderMan © (28.08.06 11:59)
а кто мешает в .dpr вставить?
← →
StriderMan © (2006-08-28 12:03) [12]
> Ketmar © (28.08.06 12:02) [11]
> а кто мешает в .dpr вставить?
в dpr экзэшника или ДЛЛки?
← →
Ketmar © (2006-08-28 12:06) [13]> [12] StriderMan © (28.08.06 12:03)
где используешь -- туда и пихай. %-)
← →
StriderMan © (2006-08-28 12:06) [14]
> Ketmar © (28.08.06 12:06) [13]
> где используешь -- туда и пихай. %-)
так я и там и сям использую :)
← →
Ketmar © (2006-08-28 12:15) [15]> [14] StriderMan © (28.08.06 12:06)
тогда туда, где первым создаётся. %-)
← →
StriderMan © (2006-08-28 12:23) [16]
> Ketmar © (28.08.06 12:15) [15]
> тогда туда, где первым создаётся. %-)
пусть, например, это будет экзешник. зарегистрил, че-то сделал.
теперь например в длл-ке нужно подгрузить компонент из потока. при попытке загрузки прилага ругнется типа Cannot Assign class TMyClass to class TMyClass. т.к. в длл и ехе это по-сути разные классы.
← →
ffo © (2006-08-28 12:39) [17]Здесь я не использую Dll. WindowProc находится просто в другом модуле.
Не будите ли вы так любезны показать как говорят в строке (т.е.кодом) хоть один из вариантов регистрации. Не умею я "где используешь -- туда и пихать".
← →
StriderMan © (2006-08-28 12:42) [18]
program MyProg;
....
begin
.....
initialization
RegisterClass(TMyClass);
finalization
UnRegisterClass(TMyClass);
end.
← →
Ketmar © (2006-08-28 12:43) [19]> [16] StriderMan © (28.08.06 12:23)
а при чём тут дельфячьи классы? мы, вроде, о классах виндовых окон говорили...
← →
StriderMan © (2006-08-28 12:46) [20]
> Ketmar © (28.08.06 12:43) [19]
> а при чём тут дельфячьи классы? мы, вроде, о классах виндовых
> окон говорили...
... и правда... че это я.... :(
← →
ffo © (2006-08-28 13:31) [21]У меня так сказать "тихая не регистрация", то есть ошибки нет не смотря на то, что в принципе в моем коде два раза запрашивается эта самая регистрация:
RegisterClassEx(wc);//первый раз
If RegisterClassEx(wc) = 0 then ShowMessage ("Класс не зарегистрирован");//второй раз
нет ошибки...нет регистрации
← →
Ketmar © (2006-08-28 13:54) [22]> [21] ffo © (28.08.06 13:31)
йок... (ушёл думать о бренности земного)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.052 c