AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mit TreeView Pages vom PageControl wechseln
Thema durchsuchen
Ansicht
Themen-Optionen

Mit TreeView Pages vom PageControl wechseln

Ein Thema von Ykcim · begonnen am 9. Dez 2011 · letzter Beitrag vom 9. Dez 2011
Antwort Antwort
Seite 1 von 2  1 2      
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#1

Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 08:53
Guten Morgen Zusammen,

ich habe in meinem Programm ein TreeView, der mit Daten aus einer Datenbank heraus erstellt wird. Auf dem Form daneben habe ich ein PageControl angeorndet, dem ich beim Starten des Programmes soviele TabSheets mit StringGrids erzeuge, wie ich Werte in meinem TreeView habe. Bis hierhin klappt alles wunderbar.

Jetzt möchte ich zwischen den TabSheets wechseln, indem ich einen Wert (Node) in dem Treeview anwähle. Die TabSheets haben den gleichen Name wie die Werte im TreeView (Text vom Node)...

Das habe ich versucht:
Delphi-Quellcode:
procedure TPlanungMB.FertigungsbereichMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var Node : TTreeNode;
begin
  if Maschinen.FindComponent(Node.Text)<>nil then
    begin
      Maschinen.ActivePage.Name:=Node.Text;
    end;
end;
Maschinen ist das PageControl, auf welchem die TabSheets liegen...
Das ist das erste Mal, dass ich mich an dynamisch erzeugten Komponenten versuche und ich hoffe, dass Ihr mir helfen könnt...

Vielen Dank

Ykcim
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 08:57
Delphi-Quellcode:
procedure TPlanungMB.FertigungsbereichMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Node : TTreeNode;
  Sheet: TTabSheet;
begin
  Node := (Sender as TTreeview).GetNodeAt(X, Y);
  if Assigned(Node) then
    begin
      Sheet := Maschinen.FindComponent(Node.Text) as TTabSheet;
      if Assigned(Sheet) then
        Maschinen.ActivePage := Sheet;
    end;
end;
Getippt und nicht getestet, Fehler vorbehalten.
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
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 09:22
Hallo DeddyH,

vielen Dank für die superschnelle Antwort!!!

Ich habe es ausprobiert, aber es scheint so, als würde Sheet := Maschinen.FindComponent(Node.Text) as TTabSheet; die Komponente nicht finden.

Ich bin dann hingegangen und habe mir in dem StringGrid, welches auf jedem TabSheet erzeugt wird, immer den Namen des TabSheet ausgeben lassen - der stimmt. Ich gehe also davon aus, dass die Komponente mit dem richtigen Namen an der richtigen Stelle ist, aber aus iegendeinem Grund scheint sie nicht gefunden zu werden.
Assigned(Sheet) wird mit FALSE ausgegeben. Hast Du da eine Idee?

Hier der Code, mit dem die Komponenten erstellt werden...
Delphi-Quellcode:
  for I := 0 to Length(Rows1[0]) - 1 do
    begin
      tabsheet:= TTabSheet.Create(self);
      tabsheet.PageControl:=Main.PlanungMB1.Maschinen;
      TabSheet.Name:=Rows1[0,I];
      //TabSheet.TabVisible:=false;
      Main.PlanungMB1.Maschinen.ActivePageIndex:=I;
      DatenGrid:=TStringGrid.Create(Main.PlanungMB1.Maschinen.ActivePage);
      DatenGrid.Parent:=Main.PlanungMB1.Maschinen.ActivePage;
      DatenGrid.Name:='Daten'+Rows1[0,I];
      DatenGrid.Align:=ALClient;
      DatenGrid.Visible:=true;
      DatenGrid.ColCount:=5;
      DatenGrid.RowCount:=5;
      DatenGrid.FixedCols:=0;
      DatenGrid.Cells[0,1]:=TabSheet.Name;
    end;
  Main.PlanungMB1.Maschinen.ActivePageIndex:=0;
  PlanungMBUnit.TreeviewRefresh(Main.PlanungMB1.Fertigungsbereich);
Vielen Dank

Ykcim
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 09:26
Wie ist es, wenn Du FindComponent in FindControl änderst oder bei Maschinen.FindComponent statt Maschinen die Komponente nimmst, die in obigem Code self entspricht?
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
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 09:59
Beides hat nicht funktioniert. Bei FindControls bekam ich es gar nicht kompiliert. Aber ich denke, dass Du schon die Ursache gefunden hast, denn ich fürchte, dass mich gerade meinen riesiegen BASISLÜCKEN einholen.

Ganz kurz eine Info, wie das Programm aufgebaut ist.

Ich habe das Projekt mit einem Form (Main).
Auf diesem Form befindet sich ein PageControl mit mehreren unsichtbaren TabSheets. (Davon wird nichts zur Laufzeit erstellt).
Auf diesen TabSheets befinden sich Frames, die die unterschiedlichen Programmbereiche darstellen...

Als ich für ein Frame die TabSheets und StringGrids zur Laufzeit erstellt habe, habe ich diesen "Vorgang" an das OnShow-Ereignis dem Main-Forms des Projektes gehängt.

Ich bezweifel, das (self) korrekt war. Ich habe es jetzt jedenfalls wie folgt geändert, aber es klappt immernoch nicht...

Komponenten erzeugen: (KLAPPT)
Delphi-Quellcode:
for I := 0 to Length(Rows1[0]) - 1 do
    begin
      tabsheet:= TTabSheet.Create(PlanungMB1);
      tabsheet.PageControl:=Main.PlanungMB1.Maschinen;
      TabSheet.Name:=Rows1[0,I];
      //TabSheet.TabVisible:=false;
      Main.PlanungMB1.Maschinen.ActivePageIndex:=I;
      DatenGrid:=TStringGrid.Create(Main.PlanungMB1.Maschinen.ActivePage);
      DatenGrid.Parent:=Main.PlanungMB1.Maschinen.ActivePage;
      DatenGrid.Name:='Daten'+Rows1[0,I];
      DatenGrid.Align:=ALClient;
      DatenGrid.Visible:=true;
      DatenGrid.ColCount:=5;
      DatenGrid.RowCount:=5;
      DatenGrid.FixedCols:=0;
      DatenGrid.Cells[0,1]:=TabSheet.Name;
    end;
  Main.PlanungMB1.Maschinen.ActivePageIndex:=0;
  PlanungMBUnit.TreeviewRefresh(Main.PlanungMB1.Fertigungsbereich);
TabSheetwechsel: (KLAPPT NICHT)
Delphi-Quellcode:
procedure TPlanungMB.FertigungsbereichMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var Node : TTreeNode;
    Sheet:TTabSheet;
begin
  Node := (Sender as TTreeview).GetNodeAt(X, Y);
  if Assigned(Node) then
     begin
       Sheet := Main.PlanungMB1.Maschinen.FindComponent(Node.Text) as TTabSheet;
       if Assigned(Sheet) then
         Maschinen.ActivePage := Sheet;
     end;
end;
Ich bin ratlos...

Gruß
Ykcim
Patrick
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 10:03
ES FUNKTIONIERT!!!

Ich hatte es nicht genauso gemacht, wie Du empfohlen hattest...

So klappt es jetzt
Sheet := Main.PlanungMB1.FindComponent(Node.Text) as TTabSheet; Vielen vielen Dank!!!

Gruß Ykcim

P.S.: Wünsche ich jetzt schon schöne Weihanchten, oder habe ich bis dahin noch eine weitere Frage? Sollten wir uns nicht mehr "begegnen" wünsche ich schon mal ein gesegnetes Weihnachtsfest!
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 10:05
Man muss eben nur wissen, wer der Owner (bei FindComponent) oder der Parent (bei FindControl) ist

[edit] Sry, ich wünsche Dir natürlich dasselbe, hatte eben das Post Scriptum übersehen. [/edit]
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
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 10:30
Ich mache es immer so:
Jeder Knoten, dem ein Tabsheet zugeordnet ist, bekommt im Inspektor im ImageIndex den Tabindex des Tabsheets.
Dann habe ich in der Imagelist zwar häufig die gleiche Bitmap, aber egal.

Außerdem hat die FindComponent-Variante den entscheidenden Nachteil, wenn ich meinen Knoten z.B. mit "Dies & Das" beschriften möchte. Ich bezweifle, das FindComponent da jemals etwas finden wird.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 10:40
Also wenn, dann würde ich das nicht über einen ImageIndex regeln, sondern über die Data-Eigenschaft der TreeNode, dafür ist die ja da.
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 Bummi
Bummi

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

AW: Mit TreeView Pages vom PageControl wechseln

  Alt 9. Dez 2011, 10:44
Wenn man Node.Data nicht anderweitig benötigt kann man hier auch direkt das zugehörige Tabsheet zuweisen.

[edit]
schon wieder keine rote Box
[/edit]
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 9. Dez 2011 um 11:59 Uhr)
  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 07:36 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