was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews
 sonstiges ¦  tutorials ¦  Add&Win Gewinnspiel

Tips (1541)

Dateien (137)
Datenbanken (90)
Drucken (35)
Grafik (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Mathematik (76)
Multimedia (45)
Oberfläche (107)
Objekte/
ActiveX (51)

OpenTools API (3)
Sonstiges (126)
Strings (83)
System (266)
VCL (242)

Tips sortiert nach
Komponente


Tip suchen

Tip hinzufügen

Add&Win Gewinnspiel

Werbung

21 Visitors Online


 
...Steuerelemente zur Laufzeit ersetzen?
Autor: Motzi
Homepage: http://www.delphi-area.de
[ Tip ausdrucken ]  

Tip Bewertung (2):  
     


unit Unit1;

interface

uses
  
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type
  
TForm1 = class(TForm)
    Panel1: TPanel;
  private
    
{ Private-Deklarationen }
  
public
    
{ Public-Deklarationen }
  
end;

  (* Neue Komponente mit eigenen Eigenschaften ersetzt erst
     zur Programmlaufzeit das Verhalten von TPanel        *)

  (* The new component replace at runtime TPanel *)

  
TExtPanel = class(TCustomControl)
  protected
    procedure 
WMSize(var Message: TWMSize); message WM_Size;
  end;

var
  
Form1: TForm1;

implementation

{$R *.DFM}


procedure TExtPanel.WMSize;
begin
  
Caption := 'Width: ' + IntToStr(Width) +
    ', Height: ' + IntToStr(Height);
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
      
// ClassParent-Zeiger suchen
      //Search ClassParent Pointer
      
while (DelphiClass.ClassParent <> OldParent) do
      begin
        with 
DelphiClass do
        begin
          if 
(ClassParent = nilor
            
(ClassParent = NewParent) then Exit;
          // DelphiClass.ClassParent zuweisen
          // Set DelphiClass.ClassParent
          
DelphiClass := ClassParent;
        end
      end
;
      // Parent-Zeiger der originalen VCL-Klasse suchen
      // 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);
      // Schreibberechtigung holen, Zeigerwerte tauschen
      // Set write permission, swap pointers
      
VirtualProtect(pVCL, SizeOf(Pointer), PAGE_READWRITE, @dwProtect);
      pVCL^ := pNEW;
      // alte Zugriffsrechte aktivieren
      // avtivate old access right
      
VirtualProtect(pVCL, SizeOf(Pointer), dwProtect, @dwProtect);
    end
  end
;



initialization
  
ReplaceParentClass(TPanel, TCustomControl, TExtPanel);

finalization
  
ReplaceParentClass(TPanel, TExtPanel, TCustomControl);
end.


 

Bewerten Sie diesen Tipp:

dürftig
ausgezeichnet


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners