Angeblich benutzt jeder
OOP und es kommen kaum Antworten ?
Es ist entsetzlich.
OOP dürfte wohl kalr sein, aber wie nutzt man das
richtig ?
Zuerst sucht man sich mal den am Besten geeigneten Vorfahren für das Vorhaben. Da kommt bereits das erste große
Du leitest alles von TComponent ab, es wird also quasi nichts Vorhandenes weiterverwendet. Du fängst also bei Null an.
Das nächste wäre die Suche nach Gemeinsamkeiten, damit das Ganze einen Sinn hat. Da kommt das nächste
Was hat Excel, Word und Outlook gemeinsam ? Ich denke sehr wenig. Dass diese Programme alle zufällig im MS-Officepaket sind spielt keine Rolle. Was soll man nun da überhaupt mit
OOP besser machen ? Vielleicht könnte man für ein Word-Dokument und eine Excel-Arbeitsmappe irgendwas mit Öffnen, speichern etc. vereinheitlichen ? Kenne den
OLE-Krempel jetzt allerdings zu wenig. Mein Vorredner hat das ja schön gezeigt mit diversen Excel-Versionen.
Ich will mal noch anhand einer Komponente zeigen, wie das auch geht (stark vereinfacht) : es soll ein Edit-Feld her, in welches man nur Zahlen eingeben kann und davon abgeleitet soll noch eins erzeugt werden, welches einen DecimalSeparator zulässt. Man hat dann schonmal zumindest die Standardeigenschaften, also Keypress, Mausereignisse etc. vordefiniert. Wenn ich jetzt da nur zulasse, Zahlen einzugeben, dann muss man ja nur das OnKeyPress behandeln.
Delphi-Quellcode:
TZulZeichen = set of char;
...
TIntEdit = class(TEdit)
protected
procedure KeyPress(var Key: Char); override;
property ZulZeichen: TZulZeichen read FZulZeichen write SetZulZeichen;
published
...
end;
Das override braucht man, damit das "eigene" OnKeyPress verwendet wird, anstatt des standardmässigen. Es ist protected deklariert, damit danach auch noch die real-Eingaben damit erledigt werden können.
Und das sieht dann so aus:
Delphi-Quellcode:
procedure TIntEdit.KeyPress(var Key: Char);
begin
inherited KeyPress(Key);
if not (Key in FZulZeichen) then
key := #0;
end;
Das inherited widerspricht zwar scheinbar dem override, aber das Editfeld soll sich ja schon im Grunde so verhalten, wie ein TEdit. Schließlich zeigt es die Eingaben an, hat ein OnEnter etc. Hinzu kommt lediglich die Einschränkung auf Zahlen. Der Vorteil liegt eben hauptsächlich darin, an einer Stelle was zu ändern und nicht an vielen. Ändere ich irgendwas an diesen Prozeduren, dann
sind sie eben überall geändert und fertig. Alternativ könnte man auch für alle betroffenen Edits diese OnKeyPress-Prozedur kopieren und einfügen. Bedeutet, dann allerdings auch im Fehlerfalle die Suche an zig-Stellen.
Bei Dir sehe ich an dieser Stelle allerdings eher das Problem, dass Du versuchst Sachen unter einen Hut zu bringen, die kaum was gemeinsam haben. Da verliert
OOP eventuell schnell seine Vorteile.