AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Ändern der Klassenhierarchie
Tutorial durchsuchen
Ansicht
Themen-Optionen

Ändern der Klassenhierarchie

Ein Tutorial von sakura · begonnen am 26. Sep 2003 · letzter Beitrag vom 22. Feb 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von sakura
sakura
Registriert seit: 10. Jun 2002
So, jetzt mal ein etwas komplizierter Beitrag, der doch sehr einfach ist. Die meisten von Euch arbeiten ja doch mit der VCL - deswegen haben wir ja auch Delphi Nachdem ich mich ein wenig mit .NET beschäftigt habe, habe ich über die sog. Helper-Classes gelesen und fand die recht "nett". Irgendwie muss das doch auch mit den aktuellen Delphi-Versionen möglich sein, oder?

Ja, es ist, wenn auch mit ein paar Einschränkungen. So können zum Beispiel keine neuen Felder (Klassen-/Objekt-Variablen) eingefügt werden, da Delphi die Objektgröße bereits zur Kompilierungszeit festlegt. Ansonsten kann man einiges mit Hilfe der folgend beschriebenen Technik erreichen.

Zielsetzung

Alle Controls, welche intern mit der Botschaft WM_SETTEXT (TLabel, TForm, TPanel, ...) arbeiten sollen erweitert werden. Wenn der Text einer dieser Controls gesetzt wird, so soll dieser nach jedem Vorkommen Zeichenkette "[dp]" durchsucht werden. Jedes Vorkommen wird anschließend mit "Delphi-PRAXiS" ersetzt.

......
Ich bin nicht zurück, ich tue nur so
 
sabbelstein
 
#11
  Alt 21. Nov 2004, 23:10


mmh sorry hab ich überlesen is wohl schon spät

gibts irgendwie eine andere möglichkeit jeder componente ein attribut hinzuzufügen ohne die sourcen zu ändern?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

 
Delphi 11 Alexandria
 
#12
  Alt 22. Nov 2004, 08:42
Wenn Du auf .NET (und Delphi.NET) umsteigst, dann ja. Da wurde das von vornherein mit ins Konzept aufgenommen. Prominentestes Beispiel ist die ToolTip Komponente. In Delphi für Win32 leider: nein.

......
Daniel W.
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

 
Turbo Delphi für Win32
 
#13
  Alt 18. Feb 2005, 14:42
Hallo zusammen

Was ist mit dem is-Operator? Der bekommt die Änderung anscheinend nicht mit und funktioniert nicht mehr.

Ich will in einem Message-Handler folgendes realisieren:

Delphi-Quellcode:
begin
  if Self is TWinControl then
    with TWinControl(Self) do
    begin
       {...}
    end;
end;
Dabei ersetze ich den Vorfahren von TWinControl.

Gruss
Shaman
Daniel Pauli
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus
 
#14
  Alt 18. Feb 2005, 14:47
Zitat von Shaman:
...Der bekommt die Änderung anscheinend nicht mit und funktioniert nicht mehr.

Ich will in einem Message-Handler folgendes realisieren:
Kannst du bitte mal sagen WAS nicht funktioniert und WIE sich das aeussert? Ausserdem, auf welcher Delphi-Version testest du das? Bei mir funktioniert is einwandfrei

Greetz
alcaeus
Andreas B.
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

 
Turbo Delphi für Win32
 
#15
  Alt 18. Feb 2005, 14:54
Also, ich ersetze den Vorfahren von TWinControl (TControl) mit:

Delphi-Quellcode:
type
  TControlEx = class(TControl)
  private
    procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
    procedure WMSetText(var Msg: TWMSetText); message WM_SETTEXT;
  end;
In den Prozeduren möchte ich nun prüfen, ob Self ein TWinControl ist. Doch bei der is-Abfrage bringt er mir inkompatible Typen. Aber hab grad gemerkt, mit InheritsFrom scheints zu klappen...

Gruss
Shaman
Daniel Pauli
  Mit Zitat antworten Zitat
Robert_G
 
#16
  Alt 18. Feb 2005, 15:09
Zitat von Shaman:
In den Prozeduren möchte ich nun prüfen, ob Self ein TWinControl ist. Doch bei der is-Abfrage bringt er mir inkompatible Typen. Aber hab grad gemerkt, mit InheritsFrom scheints zu klappen...
Der IS Operator kann ja auch nicht wissen was du da zur Laufzeit machst.
  Mit Zitat antworten Zitat
Benutzerbild von Shaman
Shaman

 
Turbo Delphi für Win32
 
#17
  Alt 18. Feb 2005, 15:12
Stimmt ja

Merci
Daniel Pauli
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

 
Delphi 2005 Professional
 
#18
  Alt 18. Feb 2005, 15:13
Zitat von Robert_G:
...
Der IS Operator kann ja auch nicht wissen was du da zur Laufzeit machst.
wieso nicht ? Der Is-operator ist doch der laufzeit-klassenprüf-operator.

Delphi-Quellcode:
function _IsClass(Child: TObject; Parent: TClass): Boolean;
begin
  Result := (Child <> nil) and Child.InheritsFrom(Parent);
end;
  Mit Zitat antworten Zitat
Robert_G
 
#19
  Alt 18. Feb 2005, 15:14
Zitat von maximov:
Zitat von Robert_G:
...
Der IS Operator kann ja auch nicht wissen was du da zur Laufzeit machst.
wieso nicht ? Der Is-operator ist doch der laufzeit-klassenprüf-operator.
Sicher. Trotzdem kann es beim Kompilieren knallen wenn es für den Compiler absolut unmöglich erscheint, dass A von B abgeleitet ist.

Nachtrag:
Bevor die nächste Frage kommt. Einfach selbst testen
Delphi-Quellcode:
type
   TBase = class
   end;

     T1stDescendant = class(TBase)
   end;

   T2ndDescendant = class(TBase)
   end;
   TComparedType = class(T2ndDescendant)
   end;

var
  X : TComparedType;
begin
   if X is TBase then
      Writeln('ist TBase'); // geht

   if X is T1stDescendant then
      Writeln('ist T1stDescendant'); // knallt
end.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

 
Delphi 2005 Professional
 
#20
  Alt 18. Feb 2005, 16:51
Zitat von Robert_G:
Zitat von maximov:
Zitat von Robert_G:
...
Der IS Operator kann ja auch nicht wissen was du da zur Laufzeit machst.
wieso nicht ? Der Is-operator ist doch der laufzeit-klassenprüf-operator.
Sicher. Trotzdem kann es beim Kompilieren knallen wenn es für den Compiler absolut unmöglich erscheint, dass A von B abgeleitet ist.

Nachtrag:
Bevor die nächste Frage kommt. Einfach selbst testen
...
Da is der kompiler natürlich ein bisschen übereifrig - aber recht hatta ja. Wenn man es wirkt wissen will, dann muss man ihn halt täuschen:
Delphi-Quellcode:
...
var
  X : TComparedType;
begin
   if X is TBase then
      Writeln('ist TBase'); // geht

   if TObject(X) is T1stDescendant then
      Writeln('ist T1stDescendant'); // knallt
end.
Aber das führt zu nix, da man, wie schon gesagt wurde, gleich InheritsFrom benutzen kann. Gut das wir das geklärt haben
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz