AGB  ·  Datenschutz  ·  Impressum  







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

TTreeView und Formularnamen als String

Ein Thema von Sugar · begonnen am 14. Feb 2021 · letzter Beitrag vom 14. Feb 2021
Antwort Antwort
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#1

TTreeView und Formularnamen als String

  Alt 14. Feb 2021, 14:44
Hallo,

ich habe ein Projekt übernommen und benötige etwas Hilfe.

Zunächst einmal möchte ich den Text eines angeklickten Eintrags in einem TTreeView ermitteln. Meine Versuche dazu sind alle gescheitert.

In der Datenbank existiert eine Tabelle, in der aufgezeichnet ist, was beim Klick auf eines der TreeView-Items passieren soll. Nun soll der TreeView variabel werden und die Konstruktion reicht nicht mehr aus. Meine Idee ist, in der Tabelle den Namen der FORM als String einzutragen und diese Form dann aufzurufen. Ich scheitere aber daran, den String(z.B. "KundenForm") so umzuwandeln, dass ich sagen könnte: KUNDENFORM.SHOW...


Kann mir jemand helfen?

Viele Grüße

Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#2

AW: TTreeView und Formularnamen als String

  Alt 14. Feb 2021, 15:10
Du weißt also, wie das Formular heißt, dann kannst Du es über den Namen suchen:

Mal als Idee hingedaddelt:
Delphi-Quellcode:
procedure ShowForm(NameDesFormulars : String);
var
  f : TWinControl;
begin
  f := FindControl(NameDesFormulars);
  if Assigned(f) then if f is TForm then TForm(f).Show;
end;

...
  qry.sql.Text := 'select Formularname from Tabelle where Spalte = ' + WertAusDemTreeView;
  qry.Open;
  ShowForm(qry.FieldByName('Formularname').AsString;
  qry.Close;
...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: TTreeView und Formularnamen als String

  Alt 14. Feb 2021, 16:41
Ähm...
Delphi-Quellcode:
{ Find a TWinControl given a window handle }
{ The global atom table is trashed when the user logs off.  The extra test
  below protects UI interactive services after the user logs off.
  Added additional tests to enure that Handle is at least within the same
  process since otherwise a bogus result can occur due to problems with
  GlobalFindAtom in Winapi.Windows.  }

function FindControl(Handle: HWnd): TWinControl;
Zielführender wäre hier vielleicht
function FindGlobalComponent(const Name: string): TComponent;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#4

AW: TTreeView und Formularnamen als String

  Alt 14. Feb 2021, 17:02
Ups, da hab' ich schon wieder meinen typischen / tückischen Schreib(Verwechslungs)fehler von FindControl und FindComponent gemacht
Delphi-Quellcode:
procedure ShowForm(NameDesFormulars : String);
var
  f : TComponent;
begin
  f := FindComponent(NameDesFormulars);
  // oder
  f := FindGlobalComponent(NameDesFormulars);
  if Assigned(f) then if f is TForm then TForm(f).Show;
end;

...
  qry.sql.Text := 'select Formularname from Tabelle where Spalte = ' + WertAusDemTreeView;
  qry.Open;
  ShowForm(qry.FieldByName('Formularname').AsString;
  qry.Close;
...
Und ja, je nach Delphiversion gibt es weitere / andere Suchmöglichkeiten, um über den Namen an Komponenten ... zu kommen.

Weitere Versuche von Ansätzen:
Delphi-Quellcode:
procedure ShowFormByName(FormName : String);
var
 i : Integer;
begin
  for i := 0 to Self.ControlCount - 1 do begin
    if Self.Controls[i] is TForm then begin
      if Self.Controls[i].Name = FormName then begin
        TForm(Self.Controls[i]).Show;
      end;
    end;
  end;
  // oder
  for i := 0 to Application.ComponentCount - 1 do begin
    if Application.Components[i].Name = FormName then begin
      if Application.Components[i] is TForm then begin
        TForm(Application.Components[i]).Show;
      end;
    end;
  end;
  // oder
  for i := 0 to Screen.FormCount - 1 do begin
    if Screen.Forms[i].Name = FormName then begin
      if Screen.Forms[i] is TForm then begin
        TForm(Screen.Forms[i]).Show;
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.065 Beiträge
 
Delphi 12 Athens
 
#5

AW: TTreeView und Formularnamen als String

  Alt 14. Feb 2021, 17:03
[del]
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.065 Beiträge
 
Delphi 12 Athens
 
#6

AW: TTreeView und Formularnamen als String

  Alt 14. Feb 2021, 17:06
Die globale Funktion FindControl(Handle) hilft eh nicht, denn wer findet erstmal das Handle? (oder willst'e ALLE Fenster im System durchgehn )
Und ansonsten gibt es FindControl(Name) aber das ist, wie FindComponent(Name), eine Methode und keine globale Funktion.


Delphi-Referenz durchsuchenScreen.Forms oder eben FindGlobalComponent (letzteres, weil TForm und TDataModule ihre Namen global registrieren)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Feb 2021 um 17:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:34 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