![]() |
Re: Eigenen Typ in Klasse
Zitat:
Du fährst aber definitiv besser wenn du deine Daten als Instanzen von Klassen abbildest. Records/Structs haben ihre Berechtigungen IMHO nur, wenn man mit einem Speicherbereich fixer Größe arbeiten muss, der in fest vorgechriebene Felder unterteilt wird. Zum Beispiel für API calls. Eine Instanz einer Klasse kostet dich eigentlich nur ihren VMT-Pointer als Overhead, dafür gewinnst du neben Polymorphie noch einiges an Unterstützung des Compilers. ;) |
Re: Eigenen Typ in Klasse
Zitat:
|
Re: Eigenen Typ in Klasse
Zitat:
Ich hoffe ich habe das in etwa richtig gemacht. Code Form1
Delphi-Quellcode:
implementation
uses Termin; {$R *.dfm} var Liste: TList; index: integer; procedure TForm1.NewItem(name, nr: String); begin Liste.Add(TTermin.Create(name,nr)); Label2.Caption:= IntToStr(index); end; procedure TForm1.FormCreate(Sender: TObject); begin Liste:= TList.Create; index:= 0; end; procedure TForm1.Button1Click(Sender: TObject); var name, nr: string; begin name:= Edit1.Text; nr:= Edit2.Text; NewItem(name,nr); end; procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Text:= TTermin(Liste[index]).name; Edit2.Text:= TTermin(Liste[index]).nr; end; procedure TForm1.Button3Click(Sender: TObject); begin Edit1.Clear; Edit2.Clear; end; procedure TForm1.Button5Click(Sender: TObject); begin if(index < Liste.Count -1) then inc(index); Label2.Caption:= IntToStr(index); self.Button2.Click; end; procedure TForm1.Button4Click(Sender: TObject); begin if(index > 0) then dec(index); Label2.Caption:= IntToStr(index); Self.Button2.Click; end; Code der Klasse
Delphi-Quellcode:
Jetzt ist mir einfach nicht ganz klar wie ich die Instanzen wieder freigebe, reicht es wenn ich alle Objects in meiner Liste mit Free freigebe und anschliessend die Liste selbst mit Free freigebe?
unit Termin;
interface type TTermin = class(TObject) private { Private-Deklarationen } FName: String; FNr: String; public { Public-Deklarationen } property Name: String read FName write FName; property nr: String read FNr write FNr; Constructor Create(Name, nr: String); end; implementation Constructor TTermin.Create(Name, nr: String); begin inherited Create; FName:= Name; FNr:= nr; end; end. grz zer00 |
Re: Eigenen Typ in Klasse
Hallo zer00,
wenn du statt einer TList eine ![]()
Delphi-Quellcode:
Wenn du dieser Klasse weitere Methoden spendierst (z.B. LoescheTermin), dann kannst du die gesamte Verwaltung der Termine dort kapseln.
// uses Contnrs;
type TTerminListe = class (TObjectList) private function GetTermin (aIndex: Integer): TTermin; public function NeuerTermin (const aName, aNr: string): TTermin; property Termin [aIndex: Integer]: TTermin read GetTermin; Default; end; function TTerminListe.GetTermin (aIndex: Integer): TTermin; begin Result := TTermin(Items[aIndex]); end; function TTerminListe.NeuerTermin (const aName, aNr: string): TTermin; begin Result := TTermin.Create(aName, aNr); Add(Result); end; Die Verwendung in deinem Programm könnte etwas so aussehen:
Delphi-Quellcode:
Noch eine Bemerkung zu den Prozeduren 'Button4Click' und 'Button5Click': du weißt hoffentlich, daß immer nur eine Anweisung von einem IF abhängt. Wenn alle drei Anweisungen nur im True-Fall ausgeführt werden sollen, dann mußt du sie mit BEGIN..END klammern:
var Liste : TTerminListe;
procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Text := Liste[index].Name; Edit2.Text := Liste[index].nr; end;
Delphi-Quellcode:
Du solltest den Controls auf deinem Formular übrigens aussagekräftigere Namen geben, dann muß man nicht raten, was die einzelnen Routinen bewirken. :wink:
if(index > 0) then
begin dec(index); Label2.Caption:= IntToStr(index); Self.Button2.Click; end; Gruß Hawkeye |
Re: Eigenen Typ in Klasse
Zitat:
Ich werde versuchen deine Tips umzusetzen. Ja ich weiss, dass nur eine Anweisung von IF abhängt. Ich werde versuchen meine Controls besser zu benennen. ;) Und noch einmal vielen Dank! grz zer00 |
Re: Eigenen Typ in Klasse
@ Hawkeye
Ich habe da noch ne Frage bezüglich der ObjectList, ich muss aus zwei Forms auf die Liste zugreiffen, wie mache ich das? grz zer00 |
Re: Eigenen Typ in Klasse
Deklarier die ObjectList public oder nimm zur Not ne globale Deklaration(nicht so schön).
mfg Christian P.S.: ggf. solltest du dazu n neues Thema aufmachen. Zugegeben grenzwertig, aber man könnte das auch als neue Frage auffassen... |
Re: Eigenen Typ in Klasse
Zitat:
|
Re: Eigenen Typ in Klasse
Danke für die Antworten.
Jetzt habe ich es so gelöst. Ich habe eine Klasse TKalender, die für die Anzeige von Tages-, Wochen-, Monatsansicht so wie für die auslösung von Terminen und das verwalten der ObjectList verantwortlich ist. Jetzt habe ich in Form1(Mainform) eine Objectvarible von Typ TKalender erzeugt. Wenn ich jetzt aus Form2 in die ObjectList schreiben will rufe ich Form1.Kalender.Liste.NeuerTermin(); auf. Ist das in etwa richtig? (Bitte seid ein bisschen geduldig mit mir ;) ) grz zer00 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz