AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zugriff einer eigenen Klasse auf ein MemoFeld ??
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff einer eigenen Klasse auf ein MemoFeld ??

Ein Thema von -lx- · begonnen am 4. Jan 2007 · letzter Beitrag vom 5. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
-lx-
(Gast)

n/a Beiträge
 
#1

Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 4. Jan 2007, 23:32
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 06:43
Am saubersten fügst du eine Referenzvariable auf ein Memofeld in deine Klasse ein, welches du dann auf das Ausgabememo setzt.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 07:11
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:
procedure Debug(msg: String);
begin
  MainForm.Memo.Lines.Add(msg);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
-lx-
(Gast)

n/a Beiträge
 
#4

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 11:00
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 11:06
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 Hier im Forum suchenBackground-Bitmap der Paintbox. Feddisch.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 11:07
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
Jürgen Höfs
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 11:08
Erweitere deine Klasse TBinaererBaum um folgendes Property:
property OutputLines:TStrings read FOutputLines write FOutputLines; Und dann zusätzlich diese Hilfsfunktion:
Delphi-Quellcode:
procedure TBinaererBaum.OutputString(const s:string);
begin
   if Assigned(FOutputLines) then FOutputLines.Add(s);
end;
Im Hauptprogramm:
Delphi-Quellcode:
...
  binaerbaum := TBinaererBaum.Create;
  binaerbaum.OutputLines := Memo1.Lines;
Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 11:50
Hallo Alex,

Zitat von -lx-:
... 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.
Oft ist es genau andersrum - auf einen professionelle Ansatz kommt die Replik "zu aufwändig".

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:
type
  TBinaryTreeNode = class
    FValue: Integer;
    FParent: TBinaryTreeNode;
    FLeft: TBinaryTreeNode;
    FRight: TBinaryTreeNode;
    // ...
  end;
Wenn der Baum sich selbstdarstellen können soll, dann würde ich zusätzlich eine visuelle Container-Klasse implementieren:

Delphi-Quellcode:
type
  TBinaryTree = class(TGraphicControl)
    FRoot: TTBinaryTreeNode;
    procedure Draw;
    // ...
  end;
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.

Machst du TBinaryTree zu einem Nachfahren von TGraphicControl, dann brauchst du keine PaintBox, sondern hast ein eigenes canvas property.

Zitat von -lx-:
Woher weist du dass ich "Alex" heiße ?
In Hessen kennt doch jeder jeden - wusstest du das nicht?

Freundliche Grüße
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 11:55
Zitat:
PS: Woher weist du dass ich "Alex" heiße ? Wink
Vielleicht aus deinem Profil?
Miniaturansicht angehängter Grafiken
lx_158.gif  
Markus Kinzler
  Mit Zitat antworten Zitat
-lx-
(Gast)

n/a Beiträge
 
#10

Re: Zugriff einer eigenen Klasse auf ein MemoFeld ??

  Alt 5. Jan 2007, 12:17
Ohje Leute, ihr verwirrt mich


Auch unter der Gefahr, dass ihr mir das Board auf den Kopf hauen werdet, unterbreite ich euch mal meine "Phantasien".

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz