Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Вниз

Занятно.   Найти похожие ветки 

 
MBo   (2002-03-11 13:41) [0]

SwissDelphiCenter
replace controls at run-time ?
Author: Motzi

TForm1 = class(TForm)
Panel1: TPanel;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
...
TExtPanel = class(TCustomControl)
protected
procedure WMSize(var Message: TWMSize); message WM_Size;
end;
...
procedure TExtPanel.WMSize;
begin
Caption:="Size:"+IntToStr(Width)+"*"+IntToStr(Height);
Color:=clGray;
end;


procedure ReplaceParentClass(DelphiClass,
OldParent,
NewParent: TClass);
var
aClassPointer: ^Byte;
pVCL, pNew: ^Pointer;
dwProtect: DWORD;
begin
if Assigned(NewParent) then
if Assigned(DelphiClass) then
begin
//Search ClassParent Pointer
while (DelphiClass.ClassParent <> OldParent) do
begin
with DelphiClass do
begin
if (ClassParent = nil) or
(ClassParent = NewParent) then Exit;
// Set DelphiClass.ClassParent
DelphiClass := ClassParent;
end
end;
// Search Parent-Pointer of original VCL-Class
aClassPointer := Pointer(DelphiClass);
Inc(aClassPointer, vmtParent);
pVCL := Pointer(aClassPointer);
aClassPointer := Pointer(NewParent);
Inc(aClassPointer, vmtSelfPtr);
pNew := Pointer(aClassPointer);
// Set write permission, swap pointers
VirtualProtect(pVCL, SizeOf(Pointer), PAGE_READWRITE, @dwProtect);
pVCL^ := pNEW;
// activate old access right
VirtualProtect(pVCL, SizeOf(Pointer), dwProtect, @dwProtect);
end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ReplaceParentClass(TPanel, TCustomControl, TExtPanel);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ReplaceParentClass(TPanel, TExtPanel, TCustomControl);
end;


 
Alx2   (2002-03-11 13:56) [1]

Нифига себе.


 
Алексей Петров   (2002-03-11 14:13) [2]

Известный трюк :)
Но его неосторожное применение черевато жестокими Access Violation-ами.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.006 c
1-57817
DenKop
2002-04-05 22:54
2002.04.18
Форма поверх всех окон.


3-57653
Sergey_R
2002-03-26 18:19
2002.04.18
Ничего не понимаю...В SQLExplorer работает, напрямую из...


1-57753
Zool
2002-04-05 15:03
2002.04.18
Поясните плиз!


14-57871
DFG
2002-03-11 21:27
2002.04.18
Кто-то устанавливал Delphi на карманный компьютер?


1-57795
Maxim Homutov
2002-04-06 12:06
2002.04.18
Продлема с БПФ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский