![]() |
Multipage-Support: Ich komme nicht weiter
Hallo,
ich bin grade dabei ein Grafik-Programm zu schreiben. Projekte, die in diesem Programm erstellt werden, können gespeichert und wieder geladen werden. Bis dahin kein Problem, aber ich möchte, dass ein "Dokument" mehrere "Seiten" beinhalten kann. Und hier komme ich einfach nicht weiter. Ich habe eine Klasse TSeite:
Delphi-Quellcode:
Eine TSeite kann verschiedene grafische Objekte (Textfelder, Ellipsen etc.) enthalten. Nun möchte ich eine Klasse "TDokument" schreiben, eigentlich müsste diese ja auch von Typ TList sein, denn sie enthält ja mehrere Seiten. Ich komme aber mit meinem Denkansatz nicht weiter. Wie kann ich in ein TDokument eine neue TSeite einfügen, wie kann ich im TDokument nur eine bestimmte Seiten ansprechen? Versteht ihr mein Problem? Ich würde mich freuen, wenn wir gemeinsam ein Grundgerüst für diese Klasse entwickeln könnten.
TSeite = class(TList)
private Width: Integer; Height: Integer; Objekt: Integer; Canvas: TCanvas; Offset: TBitmap; Raster: TRaster; Hintergrund: THintergrund; Information: TInformation; public ... end; Viele Grüße hansklok |
Re: Multipage-Support: Ich komme nicht weiter
Zitat:
Delphi-Quellcode:
Eventuell könnte man ein Array of TSeite verwenden.
TList = class(TObject)
private FList: PPointerList; FCount: Integer; FCapacity: Integer; protected function Get(Index: Integer): Pointer; procedure Grow; virtual; procedure Put(Index: Integer; Item: Pointer); procedure Notify(Ptr: Pointer; Action: TListNotification); virtual; procedure SetCapacity(NewCapacity: Integer); procedure SetCount(NewCount: Integer); public destructor Destroy; override; function Add(Item: Pointer): Integer; procedure Clear; virtual; procedure Delete(Index: Integer); class procedure Error(const Msg: string; Data: Integer); overload; virtual; class procedure Error(Msg: PResStringRec; Data: Integer); overload; procedure Exchange(Index1, Index2: Integer); function Expand: TList; function Extract(Item: Pointer): Pointer; function First: Pointer; function GetEnumerator: TListEnumerator; function IndexOf(Item: Pointer): Integer; procedure Insert(Index: Integer; Item: Pointer); function Last: Pointer; procedure Move(CurIndex, NewIndex: Integer); function Remove(Item: Pointer): Integer; procedure Pack; procedure Sort(Compare: TListSortCompare); procedure Assign(ListA: TList; AOperator: TListAssignOp = laCopy; ListB: TList = nil); property Capacity: Integer read FCapacity write SetCapacity; property Count: Integer read FCount write SetCount; property Items[Index: Integer]: Pointer read Get write Put; default; property List: PPointerList read FList; end; |
Re: Multipage-Support: Ich komme nicht weiter
Ich werfe mal eine
![]() |
Re: Multipage-Support: Ich komme nicht weiter
Entweder du baust dir deine eigene Listenklasse, oder du benutzt einfach TObjectList.
Delphi-Quellcode:
type
TDokument = class Pages: TObjectList; //.... end; //oder TDokument = class(TObjectList) //.. end; |
Re: Multipage-Support: Ich komme nicht weiter
Zitat:
|
Re: Multipage-Support: Ich komme nicht weiter
Hi,
ich würde ja diese Aufteilung vorschlagen:
Delphi-Quellcode:
type
TSeite = class(TObject) ... end; TDokument = class(TObjectList) private function GetSeite(Index: Integer): TSeite; public property Items[Index: Integer]: TSeite read GetSeite; end; function TDokument.GetSeite(Index: Integer): TSeite; begin Result := TSeite(inherited Items[Index]); end; |
Re: Multipage-Support: Ich komme nicht weiter
@ Die Muhkuh
Ich habe noch nie mit TObjectList gearbeitet, aber nach nächtlichen Dauer-Suchen hatte ich auch schon darüber nachgedacht, aber wie könnte ich z.B. eine neue Seite in das Dokument einfügen und es gilt ja auch zu beachten, dass wenn ein TDokument erstellt wird bereits eine Seite vorhanden sein soll! |
Re: Multipage-Support: Ich komme nicht weiter
Hi,
hinzufügen geht z.B. so:
Delphi-Quellcode:
// Dokument: TDokument (irgendwo erzeugen^^)
var Seite: TSeite; begin Seite := TSeite.Create(<evtl. ein Owner); Dokument.Add(Seite); // Zugriff auf Seite 1 wäre z.B. Seite := Dokument.Items[0]; // Hier kannst Du nun was mit der Seite anstellen end; |
Re: Multipage-Support: Ich komme nicht weiter
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe mir schnell mal etwas zusammengebastelt (siehe Anhang). Ist der Aufbau so richtig und warum erscheint beim Schließen der Testanwendung die Fehlermeldung "Ungültige Zeigeroperation"?
@ Die Muhkuh: Ich habe zwar schon von propertys gelsen/gehört, aber wie funktioniert das in Bezug auf meine Klasse bzw. welche Vorteile bringt mir das?
Delphi-Quellcode:
Für eure Hilfe wäre ich sehr dankbar!
property Items[Index: Integer]: TSeite read GetSeite; ????
MfG hansklok |
Re: Multipage-Support: Ich komme nicht weiter
Hi,
Du brauchst die Seiten, die Du der ObjectList hinzufügst, nicht selbst wieder über Free zerstören, dass macht die ObjectList selbst. Dann gibst Du im Destructor von TDokument die Variable Offset frei (Offset.Free). Im OnDestroy der Form steht auch noch mal Offset.Free. Eins von beiden musst Du entfernen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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 by Thomas Breitkreuz