Einzelnen Beitrag anzeigen

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, 18: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 18:52 Uhr)
  Mit Zitat antworten Zitat