AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zwischen virtuellen Formularen wechseln und suchen

Ein Thema von needatip · begonnen am 16. Apr 2019 · letzter Beitrag vom 17. Apr 2019
 
needatip

Registriert seit: 11. Jan 2004
246 Beiträge
 
Delphi 10.4 Sydney
 
#1

Zwischen virtuellen Formularen wechseln und suchen

  Alt 16. Apr 2019, 10:19
Hallo, ich entwickle eine Multiformanwendung mit Hilfe eines Virtual Treeviews. Die Forms werden zur Laufzeit in ein Panel geladen.
Beim Klick auf bestimmte Nodes werden entsprechende Forms erzeugt und dann im MainPanel(Containerpanel) mit all seinen Komponenten angezeigt. Die Nodes des Virtual Treeviews werden durch Werte einer Datenbank gefüllt. Es wird eine Baumstruktur mit Jahren/Projekten/Kategorien gebildet. Das ganze sieht dann so aus:

Anhang 51016

Die einzelnen Forms werden bei Auswahl im Treeview so erzeugt:

Delphi-Quellcode:
type
  PTreeData = ^TTreeData;

  TTreeData = record
    ID: Integer;
    Jahr: String;
    Projekt: String;
    Kategorie: String;
    FormIndex: Integer;
  end;

Delphi-Quellcode:
procedure TfmMain.VSTClick(Sender: TObject);
var
  NewFormClass: TFormClass;
  NewForm: TForm;
  NodeData: PTreeData;
  Node: PVirtualNode;
begin
  Node := VST.FocusedNode;
  if not Assigned(Node) then
    Exit;
  NodeData := VST.GetNodeData(Node);

  case NodeData.FormIndex of
    0:
      NewFormClass := TfmForm1; // Form für Positionen
    1:
      NewFormClass := TfmForm2; // Form für Kunden
    2:
      NewFormClass := TfmForm3; // Form für Rechnungen
    3:
      NewFormClass := TfmForm4; // Form für Listen
 ...

  else
    NewFormClass := nil;
  end;
  begin
    if ContainerPanel.ControlCount > 0 then
      ContainerPanel.Controls[0].Free;

    if Assigned(NewFormClass) then
    begin
      NewForm := NewFormClass.Create(Self);
      NewForm.Hide;
      NewForm.BorderStyle := bsNone;
      NewForm.Parent := ContainerPanel;
      NewForm.Align := alClient;
      NewForm.Show;
    end;
  end;
end;
Beim Anklicken eines Nodes werden dann die einzelnen Formulare angezei

Wie kann ich jetzt von Form2(Kunde) Form3(Rechnungen) aufrufen?

Hab mal folgenden Ansatz versucht:
Beim Anklicken eines Buttons wird der gewünschte Node fokusiert und selektiert.
Dann wird die OnClick Methode von VST aufgerufen. So als hätte ich mit der Maus auf den entsprechenden Node des VST geklickt.


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyNewFocusedNode: PVirtualNode;
begin
  MyNewFocusedNode := GetNodeByFormIndex(VST,145); // (145 wäre hier z.B. der Node für Rechnungen)
  if Assigned(MyNewFocusedNode) then
    VST.FocusedNode := MyNewFocusedNode;
    VST.Selected[MyNewFocusedNode] := true;
    VST.OnClick(Sender);
end;
Delphi-Quellcode:
// Funktion zum Auffinden des Formindex
function GetNodeByFormIndex(AVST: TCustomVirtualStringTree; FINDEX: Integer): PVirtualNode;
var
  Data: PTreeData;
  Node: PVirtualNode;
begin
  Result := nil;
  begin
    Node := AVST.GetFirst();
    while Assigned(Node) and (Result = nil) do
    begin
      Data := AVST.GetNodeData(Node);
      if Assigned(Data) and (Data.FormIndex = FINDEX) then
        Result := Node;
      Node := AVST.GetNext(Node);
    end;
  end;
end;
Ist das der richtige Ansatz oder gibt es einen eleganteren Weg ein anderes Formular aufzurufen?
  Mit Zitat antworten Zitat
 


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 19:18 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