AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Memo in einer Komponente verwenden

Ein Thema von Ookami · begonnen am 24. Mai 2013 · letzter Beitrag vom 24. Mai 2013
Antwort Antwort
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#1

Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 19:33
Hallo Programmierer,

ich hätte gerade mal wieder ein Problem, wie folgt:

Ich stricke mir gerade eine Komponente zusammen, in der ich aus kosmetischen Gründen und der Einfachheit halber ein TMemo integrieren möchte.

Was mich schon mal gestört hat, ist das, dass ich von aussen keinen Zugriff auf die Lines erhalte.
Das könnte ich ja umgehen, wäre nicht so schlimm. Nicht doll, aber eben verschmerzbar.

Dass ich aber innerhalb der Komponente nicht auf die Memo zugreifen kann, stört mich dann schon.

ein bisschen Code zum Verständniss

Delphi-Quellcode:
      
           TMBMemo = class(TGraphicControl)
           private
              fErrorMessage : String;
              fLines : TStringList;
         fMemo : TMemo;
              Procedure AnalyseText;
            public
              constructor Create(AOwner: TComponent); override;
              destructor Destroy; override;
              procedure Paint; Override;
            published
              Procedure SetMessage (Const Value : TStringList);
              procedure Clear;
              Property Point : TPoint Write GetPoint;
              Property SearchWord : String Read fWort;
              Property Memo : TMemo write fMemo;
Das Memo aus dem Property-Teil habe ich wieder rausgenommen, da ich von aussen nicht auf die Lines zugreifen kann. Kennt hier jemand ne Möglichkeit?

Jetzt aber zum 2. und auch dem Haupt-Problem


Deklaration im Constructor
Delphi-Quellcode:
constructor TMBWebMemo.Create(AOwner: TComponent);
begin
     inherited;
     Try
        MyHandle := WndHandle;
        WndHandle := FindWindow('TLoader',NIL);
        fLines := TStringList.Create;
   fMemo := TMemo.Create(self);
        fMemo.ScrollBars := ssHorizontal;
        fMemo.Parent := Self.Parent; // hab ich versucht, wegen des fehlenden Parent!
                                        // kein Erfolg damit
        Width := 300;
        Height:= 400;
        fErrorMessage := 'TMBMemo: Create succesful';
        SendMessage(WndHandle, WM_CompError, 0, lParam(PChar(fErrorMessage)));
     Except
       fErrorMessage := 'TMBMemo: Create failed';
       SendMessage(WndHandle, WM_CompError, 0, lParam(PChar(fErrorMessage)));
     End;
     WndHandle := MyHandle;
     fErrorMessage := '';
end;

in einer anderen Prozedur knallt es dann aber an der Stelle
Delphi-Quellcode:
        for i := 0 to Self.fBlocks.Count - 1 do
        Begin
             fBlock := fBlocks[i];
             fMemo.Lines.Add (fBlock.Eintrag); <<<== und hier knallt es mit der Meldung
                                                        "Control has no parent window"
             for j := 0 to fMemo.Lines.Count - 1 do
             Begin
                  Self.fBlock.EintragList.Add(fMemo.Lines[j]);
             End;
             j := Self.fBlock.EintragList.Count;
        End;
Beim Thema Font kannte ich das schon und hab es auch lösen können. Dummerweise weiss ich mir an dieser Stelle nicht zu helfen.

Ich danke allen schon mal im Voraus.
Wolfgang
Grüße und Danke
Wolfgang

Geändert von Ookami (24. Mai 2013 um 19:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.305 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 20:08
Und wenn Du SetParent (geerbt von TControl) überschreibst? Innerhalb dessen kannst Du ja dann den Parent des Memos setzen.
Delphi-Quellcode:
procedure TMBMemo.SetParent(AParent: TWinControl);
begin
  inherited;
  fMemo.Parent := Parent;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#3

AW: Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 20:20
Hallo DeddyH,

et jeht. Gott kann die Welt einfach sein, wenn man auf den richtigen Weg geleitet wird.
Auf die Idee bin ich nicht gekommen, da ich dem Objekt den Parent eigentlich schon übergeben habe.
Diesen dann auch an das Memo weitergeleitet habe.
Nu ja, wie auch immer, es funktioniert.

Danke.

Ich lass die Frage dennoch offen, da der erste Teil noch im Raume steht.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.305 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 20:26
So wie es oben steht hast Du eine WriteOnly-Property deklariert. Da Du das Memo aber selbst erzeugst, sollte es IMO eigentlich eine ReadOnly-Property sein.
Property Memo : TMemo read fMemo;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#5

AW: Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 20:57
Hi,

danke für deine Antwort, und absolutes Sorry. Das war mein Fehler.
Ich hatte es mit read geschrieben, bevor ich es wieder gelöscht hatte.

Nur konnte ich eben auf die Zeilen nicht zugreifen.

Also ...Lines.Add('Text'); hat nicht funktioniert.

Vorher ein Memo befüllt und dann ...Memo := AnderesMemo; hat funktioniert.
Wie gesagt, ich habe mir anders beholfen, wollte aber dennoch wissen, ob es nicht doch noch eine andere Lösung gibt.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 21:45
Hat es einen besonderen Grund dass Du Deinen Komponente von TGraphicControl ableitest, wenn Du ein Wincontrol darin verwenden willst?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Ginko

Registriert seit: 30. Aug 2008
208 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 22:08
Das mit dem Parent hatte ich mal so gemacht (bei einer anderen Klasse):
Delphi-Quellcode:
constructor TMBWebMemo.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Parent := AOwner as TWinControl;

  fMemo:= fMemo.Create(AOwner);
  fMemo.Parent:= AOwner as TWinControl;
...
end;
eventuell hilft das ja?

Geändert von Ginko (24. Mai 2013 um 22:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#8

AW: Memo in einer Komponente verwenden

  Alt 24. Mai 2013, 23:01
Hallo Bummi,

das mit der TGraphicControl ist deswegen, weil ich darauf zeichne.
Das Memo, das ich verwende ist nur aus purer Faulheit verwendet.
Schließlich sind Zeilenumbrüche dort schon ausreichend behandelt.
Speziell dann, wenn man die Größe des Fonts laufend ändert.

Die eigentliche Darstellung des Textes erfolgt dann grafisch, wird also auf dem Canvas der Klasse gezeichnet. Die Klasse entstand nur deswegen, weil ich Dinge mit dieser Klasse anstellen will und muss, die mit einem Memo nicht darzustellen sind.

Hi Ginko,

das mit dem Parent hat sich erledigt. Dieser Teil der Frage ist beantwortet.
Inzwischen hat sich auch der andere Teil der Frage geklärt. Vermutlich hing das mit dem fehlenden Parent zusammen. Bin mir nicht sicher, aber es funktioniert.



Trotzdem danke an alle.
Wolfgang
Grüße und Danke
Wolfgang

Geändert von Ookami (24. Mai 2013 um 23:05 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf