Grundlegende Methoden zum Schreiben von Steuerelementen in Delphi
Wenn Sie als Delphi-Programmierer Ihr Programmierniveau weiter verbessern möchten, müssen Sie das Schreiben von Steuerelementen beherrschen. In diesem Artikel werden einige grundlegende Methoden und Muster zum Schreiben von Steuerelementen für Anfänger vorgestellt.
Dieses Beispielsteuerelement heißt TLeiLabel und fügt auf der Basis von TLabel zwei praktische Funktionen hinzu: Eine besteht darin, dem Text eine dreidimensionale Form zu verleihen, und die andere darin, dem Text ein Hyperlink-Attribut zu verleihen. Lassen Sie uns diese Funktionen Schritt für Schritt implementieren.
1. Geben Sie dem Text eine dreidimensionale Form
Definieren Sie zunächst den Typ T3DEffect und das Attribut Style3D wie folgt:
T3DEffect=(Normal, Angehoben, Abgesenkt, Beschattet);
Eigenschaft Style3D:T3DEffect lesen FStyle3D schreiben SetStyle3D Standard Normal;
Definieren Sie dann die Variable privat: „FStyle3D:T3DEffect;“ und legen Sie die SetStyle3D()-Methode wie folgt fest. Dies ist auch das allgemeine Format für Schreibmethoden:
procedure TLeiLabel.SetStyle3D(Value: T3DEffect);
beginnen
wenn FStyle3D <> Wert dann
beginnen
FStyle3D := value;
invalidate; // Zeigt an, dass das Steuerelement neu gezeichnet wird
Ende;
Ende;
Darüber hinaus müssen für Text mit Schatten die Offsets des Schattens, ShadeXOffSet und ShadeYOffSet, definiert werden:
Eigenschaft ShadowXOffSet: Ganzzahl lesen FXOffSet schreiben SetFXOffSet Standard 5;
Eigenschaft ShadowYOffSet: Ganzzahl lesen FYOffSet schreiben SetFYOffSet Standard -5;
Die Schreibmethoden SetFXOffSet() und SetFYOffSet() ähneln SetStyle3D() oben.
Um ein Steuerelement neu zu zeichnen, müssen Sie im Allgemeinen die Paint-Methode überladen. Hier zeichnen wir nur den Text neu. Wir müssen nur die DoDrawText-Methode überladen.
Die Deklaration von DoDrawText wird in Protected abgelegt:
procedure DoDrawText(var Rect: TRect; Flags: Longint);
Hier zeichnet DoDrawText() unterschiedlichen Text nach vier Typen (normal, erhaben, vertieft und Schatten).
2. Versehen Sie den Text mit Hyperlink-Attributen
Definieren Sie eine Attribut-URL, um die zu verlinkende URL oder E-Mail-Adresse darzustellen.
Eigenschafts-URL: String read FURL write SetURL;
Schreiben Sie die Methode SetURL wie folgt:
procedure TLeiLabel.SetURL(Value: String);
Beginnen
wenn FURL <> Wert, dann FURL := Wert;
if FURL <> ' dann
Cursor := crHandPoint;
Ende;
Wenn Sie auf dieses Label klicken, müssen Sie einen Browser oder ein Tool zum Senden und Empfangen von E-Mails öffnen, was eine Überlastung der Click-Methode erfordert.
Vorgehensweise Klicken Sie auf;
Prozedur TLeiLabel.Click;
var s: string;
Beginnen
Geerbter Klick;
wenn FURL = ' dann beenden;
wenn LowerCase(Copy(FURL,1,7)) = 'http://' dann
s := FURL
else if Pos('@',FURL) <> 0 Dann
s := 'mailto:' + FURL
anders
s := 'http://' + FURL;
ShellExecute(application.Handle, 'open', PChar(s), NIL, NIL, SW_SHOWNORMAL);
Ende;
Bei allgemeinen Hyperlinks ändert sich die Farbe des Textes, wenn die Maus hinein bewegt wird. Fügen Sie dazu das Attribut HoverColor hinzu, das die Farbe des Textes angibt, wenn die Maus hinein bewegt wird.
Eigenschaft HoverColor: TColor Lesen FHoverColor Schreiben SetHoverColor default clRed;
Definieren Sie außerdem zwei Prozeduren, die die Windows-Nachrichten CM_MOUSEENTER und CM_MOUSELEAVE (Maus rein und raus) empfangen:
Procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
Procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
Prozedur TLeiLabel.CMMouseEnter (Var Message: TMessage);
beginnen
Wenn aktiviert und sichtbar und getParentForm(Self).Active dann
beginnen
FFontColor := Font.Color;
//Speichern Sie die Textfarbe
Font.Color := FHoverColor;
//Textfarbe ändern
Ende;
Ende;
Prozedur TLeiLabel.CMMouseLeave (Var Message: TMessage);
beginnen
Font.Color:=FFontColor;
//Stellt die ursprüngliche Farbe des Textes wieder her
Ende;
Um den Standardwert des Attributs festzulegen, müssen wir auch den Konstruktor Create() überladen. Beachten Sie, dass beim Überladen des Konstruktors zuerst der Konstruktor der Vorfahrenklasse aufgerufen werden muss. Das Programm zum Überladen des Create()-Konstrukts lautet wie folgt:
Konstruktor TLeiLabel.Create(AOwner: TComponent);
beginnen
geerbt Create(AOwner);
//Der Konstruktor der Vorfahrenklasse muss zuerst aufgerufen werden
FStyle3D := Normal;
FXOffSet := 5;
FYOffSet := -5;
FHoverColor := clRed;
Ende;
Abschließend muss diesem Steuerelement ein Symbol hinzugefügt werden. Wir können den Bildeditor in Delphi verwenden, um eine 24×24-Bitmap-Bitmap zu erstellen und sie als DCR-Datei zu speichern. Der Dateiname muss mit dem Namen der Pas-Datei des Steuerelements identisch sein Name und alles in Großbuchstaben.