Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1156687606
Jimmy
2006-08-27 18:06
2006.09.17
Как экономить ресурсы?


2-1156450074
vain
2006-08-25 00:07
2006.09.17
ShellListView


1-1154447915
Alex35
2006-08-01 19:58
2006.09.17
Подскажите реализацию алгоритма шифрования


3-1153105965
just
2006-07-17 07:12
2006.09.17
Добавление ключевых полей в MS Access


1-1154723143
mahab
2006-08-05 00:25
2006.09.17
TshelllistView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский