Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zur Laufzeit erstellte Objekte übergeben. (https://www.delphipraxis.net/163710-zur-laufzeit-erstellte-objekte-uebergeben.html)

Chistian 12. Okt 2011 15:07

Delphi-Version: 5

Zur Laufzeit erstellte Objekte übergeben.
 
Hi,

ich hatte eine Form mit seiner Scrollbox auf der ich verschiedenste dinge machte.

Um flexibler zu sein, sollen zur Laufzeit mehrere Scrollboxen erstellt werden können.

Delphi-Quellcode:
  with TcbFlowScrollBox.Create(self) do
   begin
    Name := GlobalAktivFlow;
    Parent := NewTabSheet;
    Align := alClient;
    PopupMenu := MainForm.FlowsPopupMenu;
    OnMouseDown := MainForm.scrollboxMousedown;
    OnMouseUp := MainForm.ScrollBoxMouseup;
    OnMouseMove := MainForm.ScrollBoxMouseMove;
   end;
Wenn ich jetzt :

Delphi-Quellcode:
        with TcbBitmapShape.Create(self) do
        begin
          Caption := TcbTextShape.Create(self);
          Caption.Text := MainForm.tempcaption;
          Caption.OnDblClick := CaptionDblClick;
          Caption.OnClick := CaptionClick;
          caption.Cursor := crHandPoint;
          Caption.Hint := 'Doppelklicken um zu ändern';
          Images := MainForm.verzimagelist;
          ImageIndex := 3;
          MainForm.tempiconindex := 3;
          Typ := MainForm.temptyp;
          Top := Y;
          Left := X
          OnClick := ShapeClick;
          Cursor := crHandPoint;
          Parent := TcbFlowScrollBox(GlobalAktivFlow); <-- Problem hier
          AlignCaption(taCenter);
          MainForm.Objekteinlesen(cbShape.GetshapeCount);
          with TFldrControl.Create(self) do
            begin
              Name := 'notify'+ DataModul.objektdata.FieldByName('name').AsString ;
              Folder := MainForm.temppath;
              OnGetResult := DirNotifyonChange;
              Parent := TcbFlowScrollBox(GlobalAktivFlow); <-- Problem hier
              Active := False;
            end;

        end;
Wir nichts eingetragen beim Parent.

Kann ich die abgeleitete TScrollbox so nicht ansprechen?

Auch funtioniert:
Delphi-Quellcode:
 DragAcceptFiles(TcbFlowScrollBox(GlobalAktivFlow).Handle, true);
nicht.

Gruß
Christian

DeddyH 12. Okt 2011 15:11

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Kann es sein, dass GlobalAktivFlow nil ist?

Chistian 12. Okt 2011 15:17

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Nee, in GlobalActivFlow steht der Name der Scrollbox.

Gruß
Christian

DeddyH 12. Okt 2011 15:19

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Trotzdem würde ich das mal überprüfen.
Delphi-Quellcode:
if Assigned(GlobalAktivFlow) then
  Parent := GlobalAktivFlow as TcbFlowScrollBox;
Wie ist es so? Springt der Debugger in die Zuweisungszeile, gibt es Fehler?

Chistian 12. Okt 2011 15:24

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Moment?!:

GlobalAktivflow ist ein Globale String Variable und enthält nur den Namen des Objektes.

Gruß
Christian

DeddyH 12. Okt 2011 15:26

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Aha. Dann geht das so natürlich nicht. Du kannst das Ding aber z.B. mittels FindComponent suchen. Eleganter fände ich es aber, wenn Du Dir die Instanz selbst merkst und nicht nur den Namen.

Chistian 12. Okt 2011 15:59

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Das funktioniert mit findcomponent, aber dumm sterben will ich natürlich nicht.

Wie funktioniert das mit der Instanz merken?

Gruß
Christian

DeddyH 12. Okt 2011 16:25

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Du hast doch eine Variable GlobalAktivFlow vom Typ String. Nun kannst Du doch anstatt oder zusätzlich zu dieser eine Variable vom Typ TcbFlowScrollBox anlegen, die die Instanz direkt nach dem Erzeugen aufnimmt.
Delphi-Quellcode:
var
  GlobalVar: TcbFlowScrollBox;

...

  GlobalVar := TcbFlowScrollBox.Create;
Anschließend kannst Du dann über die Variable auf die Instanz zugreifen.

[edit] Ähnlich macht es ja auch Delphi selbst mit den Formular-Variablen. Statt einer globalen Variablen geht das natürlich auch mit einem Feld einer Klasse (z.B. des Hauptformulars). [/edit]

Chistian 12. Okt 2011 16:48

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Das war vorher:

Delphi-Quellcode:
 NewScrollBox : TAdvScrollBox; im Puplic
 
 NewScrollbox := TAdvScrollBox.Create(self);
 NewScrollbox.Name := GlobalAktivFlow;
 NewScrollbox.Parent := NewTabSheet;
 NewScrollbox.Align := alClient;
 NewScrollbox.PopupMenu := FlowsPopupMenu;
 NewScrollbox.OnMouseDown := scrollboxMousedown;
 NewScrollbox.OnMouseUp := ScrollBoxMouseup;
 NewScrollbox.OnMouseMove := ScrollBoxMouseMove;
Aber wie hätte ich nun die richtige Instanz gefunden oder angesprochen?

Vielen Dank
Christian

mkinzler 12. Okt 2011 16:50

AW: Zur Laufzeit erstellte Objekte übergeben.
 
Könntest du bitte deinen Sourcecode in Zukunft per Code/delphi-Tag formatieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 1 von 2  1 2      

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