Delphi ist bequem und schnell, um C/S-Anwendungen zu entwickeln, da es über eine große Anzahl benutzerfreundlicher Datenzugriff und datenbewusste Steuerelemente verfügt. Es ist jedoch immer schwer zu perfektioniert. Beim Erstellen eines Widgets besteht der wichtigste Schritt darin, die richtige übergeordnete Klasse auszuwählen, mit der das Schreiben des Codes reduziert werden kann. Die Komponentenbibliothek von Delphi verfügt bereits über eine TDATETIMEPICKER -Komponente, mit der Sie die Daten und die Zeit problemlos eingeben und ändern können, indem Sie den Kalender ziehen oder das Inkrement und die Verringerung des Spinbuttons verwenden, aber nicht die Möglichkeit haben, Daten zu erfassen. Daher können wir es als übergeordnete Klasse betrachten und eine neue Steuerung sowie die datenbewusste Funktion ableiten, die mit dem Datensatz kommunizieren kann. Datenverträgliche Steuerelemente interagieren mit DataLink-Objekten mit DataSource. Daher muss ein TDATALINK-Objekt (oder seine abgeleitete Klasse) als Mitglied der Steuerung erstellt werden, und das Erstellen von öffentlichen Datenfeld- und DataSource-Eigenschaften für die Steuerung an das Tdatalink -Objekt ONDATACHEANGE UND ONUPDATEDATA EREIGNISSEN. Im Folgenden finden Sie den Hauptquellcode des Steuerelements mit entsprechenden Kommentaren: {Definieren Sie die von TDATETIMEPICER abgeleitete Tdbdatetime -Klasse. Beachten Sie, dass DB zu den Verwendungen der Einheitsschnittstelle, dem DBCTRLS -Referenz}, hinzugefügt werden sollte.
Tdbdatetime = class (tdatetimePicker)
Privat
Fdatalink: tfieldDatalink;
// tfieldDatalink ist eine abgeleitete Klasse von tdatalink, die die Interaktion eines einzelnen Feldes mit einer Datenquelle übernimmt
verfahreneatachange (Absender: Tobject);
// Wenn das Ondatachange -Ereignis ausgelöst wird, wenn sich der Datensatz des Datensatzes ändert (z. B. das Browsing -Verlauf), wird DataArtange als Event -Handling -Handling für das Ereignis verwendet
procedureUpdatedata (Absender: tobject);
// Das OnuPdatedata -Ereignis wird vor der Aktualisierung des Datensatzes ausgelöst. Aktualisiertata wird als Ereignisverarbeitungshandel für das Ereignis verwendet
functionGetDataSource: tdataSource;
VerfahrensetDataSource (Wert: tdataSource);
FunctionGetDatafield: String;
ProzeduresetDatafield (Wert: String);
procedurecmexit (varmessage: tcmexit); meldung cm_exit; // blitz
geschützt
procedurechange; override; // OnChange -Ereignis wird ausgelöst, wenn Datum und Uhrzeit in der Kontrolländerung geändert werden.
Prozedurenotifizierung (Akomponent: tcomponent;
Operation: Toperation); Überschreibung;
// Delphis IDE ruft diese Methode auf, um andere Steuerelemente zu benachrichtigen, wenn ein Steuerelement aus dem Formular entfernt wird
öffentlich
constructorcreate (aowner: tcomponent); override;
destructorderestroy; überschreiben;
gelöst
PropertyDataSource: TdatasourCeraDgetDataSource
WritesetDataSource; // DataSource -Eigenschaft zur Steuerung hinzufügen, damit sie mit der DataSource -Komponente verbunden werden kann
PropertyDatafield: StringReadgetDatafield
schreibtsetdatafield;
Ende; // Datafield -Attribut zur Steuerung hinzufügen,
Machen Sie es auf ein Tfield -Objekt, das ein Feld darstellt
procedureregister; // Komponente registrieren
Durchführung
proceduretdbDatetime.cmexit;
Beginnen
versuchen
Fdatalink.updaterecord;
// Dataset aktualisieren, wenn das Steuerelement den Fokus verliert, wodurch das Onupdatedata -Ereignis ausgelöst wird
außer
Setfocus;
erheben;
Ende;
Doexit;
Ende;
constructortdbDatetime.create (aowner: tcomponent);
Beginnen
erbtecreate (aowner);
// Datalink -Objekt erstellen, ontdatachange, montieren,
Onupdatedata Event Processing -Handle
Fdatalink: = tfieldDatalink.create;
Fdatalink.ondatAchange: = DataArtange;
Fdatalink.onupdatedata: = updateatata;
Ende;
Destructortdbdatetime.destroy;
Beginnen
Fdatalink.ondatachange: = nil;
Fdatalink.onupdatedata: = nil;
Fdatalink.free;
erbterdestroy;
Ende;
functionTdbDatetime.getDataSource: tdataSource;
Beginnen
Ergebnis: = fdatalink.dataSource;
Ende;
ProceduretdbDatetime.setDataSource (Wert: tdataSource);
Beginnen
Fdatalink.dataSource: = Wert;
Ende;
functionTdbDatetime.getDatafield: String;
Beginnen
Ergebnis: = fdatalink.fieldname;
Ende;
proceduretDBDatetime.setDatafield (Wert: String);
Beginnen
Fdatalink.fieldname: = value;
Ende;
proceduretdbDatetime.datachange (Absender: tobject);
Beginnen
Datetime: = jetzt;
// Wenn die Steuerung mit dem aktiven Datensatz verbunden ist, ändert sich der Datensatz
Das Steuerelement zeigt den entsprechenden Feldwert des aktuellen Datensatzes an
Iffdatalink.field Nilthen
iffdatalink.field.text dann
Datetime: = fdatalink.field.asdatetime;
Ende;
ProceduretDBDATETIME.UpDATEDATA (Absender: tobject);
Beginnen
Fdatalink.field.asdatetime: = datetime;
// Aktualisieren Sie die entsprechenden Felder mit dem Datum und der Uhrzeit in der Steuerung
Ende;
proceduretdbDatetime.change;
Beginnen
// Datensatz festlegen, um den Status zu bearbeiten, wenn der Benutzer den Inhalt in der Steuerung ändert
Fdatalink.modified;
ifnotfdatalink.editingThen
Fdatalink.edit;
erbteChange;
Ende;
proceduretdbDatetime.notification (Akomponent:
Tcomponent; Operation: Toperation);
Beginnen
erbte (Akomponent, Operation);
// Wenn die mit der Kontrolle verbundene TdataSource ist
Legen Sie die Datenquelle des Steuerelements auf leer beim Löschen fest
if (operation = opremove) und (fdatalink nil)
und (acomponent = dataSource) dann
DataSource: = nil;
Ende;
prozedureregister;
Beginnen
Register Components (Datacontrols,
[Tdbdatetime]); // Nach der Registrierung des Steuerelements ist es auf der DataControls -Seite installiert
Ende;
Ende.
Nach der Installation kann diese Steuerung den Kalender abrufen und die Datums- und Uhrzeitfelder der Datenbank erhöhen oder verringern und Daten in zwei Formaten anzeigen, was bequem und praktisch ist. Die Kontrollen sind in Delphi3 und Delphi4 sicher und zuverlässig.