Visuelle Komponente ist tatsächlich eine Klasse. Um jedoch eine Kontrolle zu schreiben, müssen Sie ein Paket verwenden. Wählen Sie im Menü Datei neu und erstellen Sie ein neues Paket. Klicken Sie dann auf die Schaltfläche Hinzufügen im Paketfenster, um eine Komponente (Einheit) hinzuzufügen.
Wählen Sie oben im Popup-Dialogfeld neue Komponente aus. Da alle Attribute, Methoden und Ereignisse einer Steuerung nicht selbst komponiert werden können, müssen Sie die Vorfahrklasse (oder "Elternklasse" oder "Basisklasse") auswählen und dann Ihre eigenen Attribute, Methoden und Ereignisse hinzufügen. . Wählen Sie die gewünschte Vorfahrklasse im Dropdown-Feld nach dem Typ Vorfahren aus. Da Sie ein Bild zeichnen müssen, indem Sie eine visuelle Kontrolle schreiben, wird TGRAPHICCONTROL als Vorfahrklasse ausgewählt. Geben Sie dann den Namen der neuen Steuerung (Klasse) in das Feld Klassenname ein, das normalerweise mit "T" beginnt. Die Seite der Palette wird verwendet, um den Namen der Steuerseite des neuen Steuerelements im Fenster Delphi auszuwählen, z. B. "Standard", der von Ihnen selbst eingenommen werden kann. Fügen Sie den Pfad und den Dateinamen der neuen Steuerdatei in den Einheitsdateinamen hinzu und klicken Sie auf die Schaltfläche OK. Neue Steuerelemente werden hinzugefügt. Jetzt können Sie Code für diese Kontrolle schreiben.
Das Folgende ist ein Beispiel für das Schreiben einer Bildlaufleiste, mit der das Bild anpassen kann, um zu veranschaulichen, wie eine visuelle Steuerung geschrieben wird.
Befolgen Sie die obige Methode, wählen Sie TGRAPHICCONTROL als Vorfahrklasse aus, und der Name der neuen Kontrolle ist tpighorizontalsCroller (Horizontal -Scrollbar). Nachdem Sie den Dateipfad und den Dateinamen ausgewählt haben, klicken Sie auf die Schaltfläche OK, um den Code zu schreiben.
Jedes Steuerelement wird erstellt und gelöscht, sodass Sie zuerst diese beiden Prozesse schreiben müssen. Für jeden Prozess in der Kontrolle muss er zuerst definiert und später geschrieben werden. Es gibt drei Arten von Prozessen oder Attributen, die definiert sind:
1. Das Definierte nach privat wird intern zur Kontrolle verwendet, und die Person, die die Kontrolle verwendet, kann sie nicht sehen.
2. Was nach dem Schutz definiert wird, ist im Allgemeinen unsichtbar und kann nur gesehen werden, wenn andere die Kontrolle als Vorfahr -Klasse verwenden, um andere Kontrollen zu schreiben.
3. Nur andere können nach der Öffentlichkeit im Programm aufgerufen werden;
4. Die definierten nach der Veröffentlichung sind im Eigenschaftsfenster (Objektinspektor) zu sehen. Da der Erstellungs- und Löschprozess nicht nur automatisch ausgeführt wird, wenn das Steuerelement während des Programmierungsprozesses erstellt wird, kann er auch aufgerufen werden, wenn das Steuerelement während des Programms dynamisch erstellt wird, sodass er nach öffentlicher ⑴ definiert ist. (Diese Sequenznummer gibt den Speicherort des Code im angehängten Quellprogramm an, das gleiche unten. Wir werden unten darüber sprechen.
Fügen wir dieser Kontrolle zuerst einige Eigenschaften hinzu. Wir definieren eine Max -Eigenschaft, um den Maximalwert der Bildlaufleiste festzulegen oder zu lesen. Da Attribute nicht direkt in Programmen verwendet werden, müssen Sie eine Variable definieren, die dem Attribut entspricht, während Sie ihren Wert ändern oder lesen. Da es nur in der Kontrolle verwendet wird, definieren wir es nach privatem ⑵. (Im Allgemeinen beginnen Variablen, die Attributen zugeordnet sind, mit "f", wie z. B. Fmax) nach Definieren der Variablen die Attribute. Diese Eigenschaft muss im Objektinspektorfenster sichtbar sein. Definieren Sie sie also und veröffentlichen Sie sie nach ⑶. Die definierte Syntax ist:
Eigenschaft <Eigenschaft Name>: <Typ> Lesen <Responsive Variable Beim Lesen dieser Eigenschaft> schreiben <Responsive Variable oder Prozess beim Schreiben dieser Eigenschaft>
Andere Variablen und Attribute werden ebenfalls ähnlich definiert (z. B. minem Minimalwert, Wertstromwert usw.). Im Folgenden definieren wir mehrere Attribute und Variablen, um das Bildlaufbuhlbild festzulegen (da die Bildvariablen besonders sind, werde ich separat darüber sprechen). Wir definieren Linksbuttonuppicture (Bild des linken Tastens), linksDondownPicture (Bild von links drücken Sie Bild) und so auf als Tbitmap -Typ (muss die entsprechende Variable definieren).
Jeder muss bemerkt haben, dass beim Definieren dieser Eigenschaften im angehängten Quellprogramm die entsprechende Variable beim Lesen der nach dem Lesen angegebenen Eigenschaften f ... und die entsprechende Variable beim Schreiben der nach dem Schreiben angegebenen Eigenschaften keine Variablen sind, sondern so etwas wie Set…, es ist ein benutzerdefinierter Prozess. Der Prozess als diese Funktion ist definiert als:
Prozedur <Prozessname> (Wert: <Wertstyp der festgelegten Eigenschaft>)
Da beim Schreiben der Attribute dieser Klasse andere Dinge getan werden müssen, kann sie nicht mit nur einer Variablen verarbeitet werden, sondern sollte mit einem Prozess verarbeitet werden. Dieser Prozess ist im Allgemeinen nach dem Schutz definiert. In diesem Klassenprozess wird eine solche Anweisung wie diese bei ⑷ verwendet, um einer Variablen des Typs tbitmap Werte zuzuweisen, die angewendet wird, da Variablen dieses Typs nicht direkt zugewiesen werden können.
Nachdem die Eigenschaften dieser Variablen vom Typ TBITMAP -Typ definiert wurden, muss der Code im oben genannten Prozess erstellen und zerstören. Da Tbitmap auch eine Klasse ist, muss es im Erstellungsprozess ⑸ erstellt werden und während des Zerstörungsprozesses frei veröffentlicht werden. Die hier genannte ererbte Aussage wird verwendet, um anzuzeigen, dass der Prozess aus der Vorfahrklasse geerbt wird. (Dies darf nicht fallen gelassen werden).
Da wir visuelle Steuerelemente schreiben, müssen wir Bilder auf die Steuerelemente zeichnen. Die Vorfahrklasse unserer Kontrolle, TGRAPHICCONTROL, verkaps ein Leinwandobjekt, mit dem wir direkt Bilder zeichnen können. Wenn Sie mit der Verwendung von Leinwand nicht vertraut sind, finden Sie am besten ein Buch, um es zu lesen.
Die folgende Aufgabe ist, Bilder zu zeichnen. Wie zeichne ich Bilder auf die Kontrolle? Es gibt ein Lackierereignis in der Vorfahrklasse TgraphicControl, die automatisch ausgelöst wird, wenn die Steuerung neu gestrichen werden muss. Was wir jetzt tun müssen, ist, ein Programm für diese Veranstaltung zu schreiben. Definieren Sie zunächst ein Canvas -Objekt nach dem Schutz. Da es sich bereits in der Vorfahrklasse befindet, müssen keine Erklärung hinzugefügt werden. Wir werden dieses Objekt zum Zeichnen verwenden. Als nächstes müssen Sie einen Lackvorgang definieren und den Code schreiben, um die Kontrolle zu zeichnen. Definieren Sie zuerst den Lackprozess in der Öffentlichkeit. Da es von der Vorfahrklasse ausgelöst wird und nicht vom Benutzer, muss die Überschreibung anschließend hinzugefügt werden, andernfalls wird die Steuerung nicht zu einer visuellen Kontrolle, da der Farbvorgang niemals aufgerufen wird. Schreiben wir den Code für den Lackprozess⑽.
Die Variablen wie T_Height im Lackierungsprozess des an diesem Artikel angehängten Quellprogramms werden in der Scroll -Leiste die Größe der Schaltflächen, Schieberegler usw. speichern. Ich glaube, jeder wird den Betrieb der Leinwand auf einen Blick verstehen. Es ist erwähnenswert, dass das folgende Urteil über die variable Fautosize ⑾
Fautosize ist eine boolesche Variable, die mit der Eigenschaft des Kontrolls verbunden ist. Beachten Sie, dass das Attribut im Steuercode nicht direkt aufgerufen wird, die entsprechende Variable verwendet wird.
Nachdem das Programm hier zusammengestellt wurde, kann es nicht scrollen, auch wenn ich endlich nach meiner neuen Kontrolle suchen kann. Schreiben wir nun das Mausereignis, damit wir es manipulieren können. Die Definition des Mausereignissprozesses ist dem Lackprozess sehr ähnlich, mit der Ausnahme, dass Parameterbeschreibungen später hinzugefügt werden sollten.
Mausereignisse werden in Mousedown, Mousemove und MouseUp unterteilt, und Override muss nach der Definition hinzugefügt werden. Schreiben Sie später seinen Code später. Hinweis: Das Mausereignis hier ist Maus…, nicht die übliche Onmouse…. Aber wofür ist die Definition in ⒀? Die Ereignisdefinitionen hier sind alle, die Benutzer verwenden können, dh bei Verwendung dieses Steuerelements werden sie auf der Ereignisseite im Objektinspektor angezeigt.
Der Code für diese Mausereignisse ist ebenfalls sehr einfach. Es ist erwähnenswert, dass Sie beim Aufrufen eines benutzerdefinierten Ereignisses zuerst eine solche Erklärung bei ⒁ verwenden müssen, um festzustellen, ob der Benutzer Code für das Ereignis geschrieben hat. Dies ist sehr wichtig, sonst tritt ein Fehler im Anruf auf.
Jeder hat festgestellt, dass die gerade jetzt alle genannten Ereignisse angepasst sind, und die Definitionsmethode ist sehr einfach, was dem Definitionsattribut ähnelt, aber beim Typen tnotifyEvent ist.
TnotifyEvent ist das Standard -Ereignis, das definiert ist als:
TnotifyEvent = procedure (Absender: tobject)
Wenn Sie eine andere Form des Ereignisses definieren möchten, müssen Sie dies tun: Schreiben Sie es zuerst in Typ und dann
<Sereigentypname> = procedure (<PARAMETER>: <Typs>)
Zum Beispiel:
TcustomeEvent = procedure (a: ganzzahl; b: string);
Dann nach öffentlicher Definition:
<Eventsname>: <Ereignis Typ Name>
Zum Beispiel:
Anvent: tcustomevent;
Nach dem Lesen sollten Sie das gesamte Programm verstehen. Wenn ein Fehler in der Kompilierung oder Operation vorliegt, überprüfen Sie bitte die folgenden Punkte:
1. ob es erbte Aussagen im Erstellen und Zerstörungsprozess gibt;
2. Ob die Variablen des TBitmap -Typs erstellen und frei erstellen oder kostenlos sind;
3.. Gibt es vor dem Prozess einen Kontrollnamen, zum Beispiel: tpighorizontalscroller.mosemove
So bestimmen Sie, ob die Maus die Kontrolle betritt oder verlässt:
Definieren Sie den folgenden Prozess:
procedure mouseenter (var msg: tmessage);
Prozedur Mouseleave (var msg: tmessage);
Schreiben Sie einfach den Code unten!
Diese Methode ist sehr nützlich, um Drei-Staaten-Schaltflächen zu schreiben!