![]() |
Zugriff einer eigenen Klasse auf ein MemoFeld ??
Hallo.
Und zwar ich habe eine selbstdefinierte Klasse TBinaererBaum bzw. mTBinaeraerBaum. Nun möchte ich aus Gründen der Überprüfung des Codes, Textstücke in das Memofeld einfügen, welches auf dem Standartform (Form 1) eingefügt worden ist. Wie stell ich das an? Eine Tochterklasse soll quasi auf das MemoFeld in TForm1 bzw. Unit1 bzw. Form 1 zugreifen. Mit freundlichen Grüßen |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Am saubersten fügst du eine Referenzvariable auf ein Memofeld in deine Klasse ein, welches du dann auf das Ausgabememo setzt.
|
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Hallo Alex,
wenn du die Ausgabe im Memo nur während der Testphase benötigst, dann könntest du auch einfach eine globale Prozedur verwenden, die du aus deiner Klasse aufrufen kannst:
Delphi-Quellcode:
Grüße vom marabu
procedure Debug(msg: String);
begin MainForm.Memo.Lines.Add(msg); end; |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Hallo und danke für eure Antworten! =)
Wie meinst du das, mkinzler ? Könntest du mir ein Beispile posten? Danke marabu, dass mit der Fehlersuche hat sich in dem Zusammenhang erledigt. Daher wäre eine "richtige" und "sauberer" Art auf eine höhere Klasse zuzugreifen angebrachter. Das eig. Problem ist nun, ich habe einen binären Baum erstellt bzw. der wird nach und nach durch eingabe von Zahlen durch den BENUTZER erstell. Um nun aber zu überprüfen ob er es auch richtig macht soll ich bzw. würde ich gern den Baum grafisch darstellen. Dynamisches anzeigen, also immer den optimalsten abstand etc. pp. werde ich wohl nicht schaffen zu programmieren, aber bis zu einer anzahl von 2^4 Knoten bzw. Wurzeln bzw. Blättern werde ich wohl schaffen. Meien Frage ist nun eig. wieder die gleiche: Wie greif ich aus einer niederen Klasse auf dei PaintBox zu ? Oder soo ich vll. eine extra Klasse erstellen, in der die verschiedenen Zeichenproceduren drnstehen und die dann erst auf die PaintBox zugreifen? Oder soll ich direkt , ohne extra Klasse, darauf zugreife? Wenn ja wie genau ? Mit der PaintBox habe ich shcon gearbeitet. Jedglich habe ich es noch nicht ganz raus, wie man es hinbekommt, dass das gezeichnete auch weiter sichtbar bleibt, fals man die Paintbox durch ein anderes Fenster verdeckt. Mit freundlichen Grüßen PS: Woher weist du dass ich "Alex" heiße ? ;) |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Ich würde der Knoten-Klasse eine Methode Draw(aCanvas: TCanvas, ...) spendieren, die sich selbst und alle Unterknoten auf die Canvas zeichnet. Dann erstellst du ein Bitmap, übergibst dessen Canvas dem Wurzel-Objekt und verwendest das Resultat als
![]() |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Mit Referenzfeld ist so etwas gemeint:
Delphi-Quellcode:
TMeineKlasse.Create(AMemo: TMemo);
begin [ ... ] { Referenz der Memo in interem Zeiger speichern } FMemo:= AMemo; { Dannnach kannst du auf FMemo zugreifen } { etwa so: } FMemo.Lines.Add('Debugstring'); [ ... ] end; Im Hauptprogramm dann über die Parameter dein Memofeld übergeben:
Delphi-Quellcode:
begin
[...] { Beispiel: Memo1 ist in deinem programm vorhanden } MeineKlasse:= TMeinKlasse.Create(Memo1); [...] end; Gruß Pfoto |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Erweitere deine Klasse TBinaererBaum um folgendes Property:
Delphi-Quellcode:
Und dann zusätzlich diese Hilfsfunktion:
property OutputLines:TStrings read FOutputLines write FOutputLines;
Delphi-Quellcode:
Im Hauptprogramm:
procedure TBinaererBaum.OutputString(const s:string);
begin if Assigned(FOutputLines) then FOutputLines.Add(s); end;
Delphi-Quellcode:
...
binaerbaum := TBinaererBaum.Create; binaerbaum.OutputLines := Memo1.Lines; |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Hallo Alex,
Zitat:
Der abstrakte Datentyp BinaryTree kann mit oder ohne Container-Klasse implementiert werden. Ohne die Fähigkeit zur Selbstdarstellung würde ich eine Single Class Implementierung wählen - hier nur angedeutet:
Delphi-Quellcode:
Wenn der Baum sich selbstdarstellen können soll, dann würde ich zusätzlich eine visuelle Container-Klasse implementieren:
type
TBinaryTreeNode = class FValue: Integer; FParent: TBinaryTreeNode; FLeft: TBinaryTreeNode; FRight: TBinaryTreeNode; // ... end;
Delphi-Quellcode:
Die Basisklasse kannst du nach deinen Bedürfnissen wählen. Der Vorteil dieser Vorgehensweise ist, dass die Informationen zur Selbstdarstellung nicht redundant bei den Knoten liegen - wo sie auch gar nichts zu suchen haben.
type
TBinaryTree = class(TGraphicControl) FRoot: TTBinaryTreeNode; procedure Draw; // ... end; Machst du TBinaryTree zu einem Nachfahren von TGraphicControl, dann brauchst du keine PaintBox, sondern hast ein eigenes canvas property. Zitat:
Freundliche Grüße |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Ohje Leute, ihr verwirrt mich :gruebel:
Auch unter der Gefahr, dass ihr mir das Board auf den Kopf hauen werdet, unterbreite ich euch mal meine "Phantasien". :smile2: Ich dachte mir, dass ich eine neue Klasse erstelle, die von TBinaererBaum gekannt wird und selbst TForm , also das Hauptprogramm, kennt. Darein kommen die puplic proceduren wie ZeichenWurzel() und/oder ZeichneVerbindug() oder sowas in der Art. Eig. müsste ich ja dann von TBinaererBaum aus auf diese neue Klasse, nennen wir sie TZeichnen, zugreifen können. Nur ist nun meine Frage wie ich von TZeichnen auf TForm alsodas Hauprpgrogramm druaf zugreifne kann bzw. auf das PaintBox Objekt (KLasse ?), dass ja scheinbar eine Methode von TForm ist. Bitte bitte seit nachsichtig... ich bin seit halb 7 wach, hab kaum geschalfen aber dafür die theorie bestanden :) *gähn* Mit freundlichen Grüßen |
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Leite deine Klasse von TComponent ab, dann kannst du über den .Parent af die Form zugreifen.
|
Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??
Liste der Anhänge anzeigen (Anzahl: 1)
TComponent kennt er aber nicht. Ich blick gerade garnicht mehr durch. HIer mal die das ganze Projekt zum anschaun als RAR.
Um nochmal mein Problem zu schildern: Wie kan ich von der Klasse "TBinaererBaum" auf das Objekt oder die Klasse PaintBox der Klasse TForm zugreifen ? Mir ist das nicht klar wie das gehen soll. :( mit freundlichen Grüßen PS: Ja in dem kleien Landtsirhc Hessen kennt jeder wirklich jeden... ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 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