Einzelnen Beitrag anzeigen

Benutzerbild von danku
danku

Registriert seit: 9. Apr 2006
Ort: 32-bit Adressbus
181 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: text-string aus 2. klasse aufrufen

  Alt 16. Apr 2007, 16:59
Zitat von Jelly:
Ich hab das Gefühl, du hast das Konzept der OO Programmierung nicht ganz verstanden. Sinn ist es, dass Objekte eigenständig arbeiten sollen. In deinem Fall ist die Klasse TLoadSave. Und so wie es aussieht, soll die Texte in einem Memo wegloggen. Es macht dann keinen Sinn, bei jedem Aufruf deiner Log Methode das Memo mitzuübergeben. So Sachen macht man einmal, in deinem Fall würd ich es im Constructor machen. Und um bischen flexibel zu bleiben, würde ich mich nicht auf ein Memo beschränken, sondern würde im Constructor einfach eine TStrings Instanz übergeben.

Delphi-Quellcode:
unit uLoadSave;

interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls ;

type
  TLoadSave = class
  private
     FStringList: TStrings;
  public
     constructor Create (AStringList : TStrings) ; reintroduce ;
     property StringList : TStrings read FStringList write FStringList ;

     procedure Log (What : string) ;
  end;

implementation

{ TLoadSave }

constructor TLoadSave.Create(AStringList: TStrings);
begin
     inherited Create ;
     assert (assigned(AStringList) and (AStringList is TStrings),'Bitte StringList Objekt im Constructor übergeben') ;

     FStringList := AStringList ;
end;

procedure TLoadSave.Log(What: string);
begin
     FStringList.Add (What) ;
end;

end.
Der Aufruf erfolgt dann so:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
     LS := TLoadSave (memo1.lines) ; // LS als Variable in deiner Form deklarieren
end;

procedure TForm1.Button1Click (Sender : TObject) ;
begin
    LS.Log ('Halleluja') ;
end ;
nimms mir nicht übel aber mit dem LS kann ich nichts anfangen. dieser dient doch als klassenbezeichner (punkt-notation) um damit die methoden aufzurufen. es gehört trotzdem noch get und set mit in die unit oder? bei procedure TLoad.Log(What: string); kommt eine EAccessViolation Meldung
  Mit Zitat antworten Zitat