Hallo Der Unwissende,
erst mal Danke für die sehr ausführliche Antwort.
Ich habe ja schon einige Gehversuche in
OOP unternommen, aber meistens endet es damit, dass ich eine riesige sehr unübersichtliche Mammut-Class bekomme.
Die meisten Schwierigkeiten bereiten mir die Schnittstellen von einer Klasse zu anderen.
Ich will das mal an einem Beispiel verdeutlichen:
Ich konstruiere eine OLEBasisClass die in der Lage ist verschiede
OLE-Applikationen zu starten. Das ist sozusagen das Grundgerüst was alle unter const aufgeführten Applicationen gemeinsam haben.
Delphi-Quellcode:
const
coEXCEL= 'Excel.Application';
coWORD= 'Word.Application';
coOUTLOOK= 'Outlook.Application';
coIE= 'InternetExplorer.Application';
type
TOLEObj= Class(TComponent)
private
FOleVarObj: OLEVariant;
FOleObjGestartet: Boolean;
FOleObjVisible: Boolean;
function OleObjAktive(strApplicationsName: String): boolean;
function getFOleObjGestartet: Boolean;
procedure setFOleObjGestartet(const Value: Boolean);
function getFOleObjVisible: boolean;
procedure setFOleObjVisible(const Value: boolean);
function GetFOleVarObj: OleVariant;
public
Constructor Create(AOwner: TComponent; OleApplication: String); virtual;
Destructor Destroy; override;
property OLEObjStart: Boolean read getFOleObjGestartet
write setFOleObjGestartet Default TRUE;
property Visible: boolean read getFOleObjVisible
write setFOleObjVisible Default TRUE;
property OLEInstanc : OleVariant read GetFOleVarObj;
End;
Davon abgeleitet habe ich nun eine nur für Excel abgeleitet Klasse.
Delphi-Quellcode:
type
THPLExcel= Class(TOLEObj)
private
FExcelVersion: String;
Public
Constructor Create(AOwner: TComponent);
Destructor Destroy; override;
procedure schreiben(Zeile, Spalte: Longint; Text: String);
End;
implementation
uses
Windows, SysUtils;
{ HPLExcel }
constructor THPLExcel.Create(aOwner: TComponent);
begin
inherited Create(aOwner, coEXCEL);
end;
Im eigentlichen Programm wird Excel dann z.B: so aufgerufen:
Delphi-Quellcode:
procedure TfrmHPLExcelKomponenteDemo.Button1Click(Sender: TObject);
var
aExcel: THPLExcel;
begin
aExcel := THPLExcel.Create(self);
try
try
aExcel.Visible:= TRUE;
finally
aExcel.Free;
end;
except
on E:
Exception do
begin
MessageDlg(E.
Message+#13+#13+'
Excel ist nicht gestartet',
mtError, [mbOK], 0);
end;
end;
end;
Was jetzt überhaut nicht dabei ist sind zum Beispiel die Workbooks als eigene Klasse. Die Funktionen sind alle unter der THPLExcel-Class mit untergebracht.
Mir ist immer noch nicht klar, wie diese sagen wir mal Unterklassen von Excel entwickelt werden sollen und diese dann in THPLExcel-Class aufgerufen werden sollen.
Oder, ist der ganze Ansatz falsch und man fängt zuerst mit der Zelle an weiter zum WorkSheet usw. und arbeitet sich weiter bis zur Excel-Application vor?
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.