Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   (dumme Frage) String => TForm? (https://www.delphipraxis.net/193021-dumme-frage-string-%3D-tform.html)

SneakyBagels 10. Jun 2017 20:44

(dumme Frage) String => TForm?
 
Ja die Frage ist echt sehr dumm aber ich habe schon oft gesehen, dass es gute Lösungen für komische Problemstellungen gab.
Ist es möglich von einem String das passende TForm zu bekommen ohne nebenbei eine Liste der TForms (array) zu führen?

Uwe Raabe 10. Jun 2017 21:02

AW: (dumme Frage) String => TForm?
 
Existiert das Form bereits? Dann kannst du über
Delphi-Quellcode:
for I := 0 to Screen.FormCount - 1 do begin
  if Forms[I].Name = 'MyFormName' then begin
  end;
end;
das gesuchte Form finden.

SneakyBagels 10. Jun 2017 21:08

AW: (dumme Frage) String => TForm?
 
Delphi-Quellcode:
Screen.Forms[I].Name
Das kannte ich noch nicht.

Wenn das so ist, dann brauche ich die Schleife in meinem Fall nicht.

Es ist so:
ich modifiziere meine Editfelder und hängen rechts ein Shape sowie ein Label dran.
Wenn man das Label klickt, wird das Edit geleert oder sonst irgendeine andere spezifische Aktion wird ausgeführt.

Der Label-Name ist etwa 'ClearEditLbl_' + IntToStr(i) + '_NameDesEdits'
Im OnClick des Labels pflücke ich nun Name auseinander und erhalte ein Array mit 3 Teilen. Teil 2 könnte ich dann Screen.Forms[] übergeben.

Problem gelöst. Danke.

himitsu 10. Jun 2017 21:55

AW: (dumme Frage) String => TForm?
 
Zitat:

Ist es möglich von einem String das passende TForm zu bekommen ohne nebenbei eine Liste der TForms (array) zu führen?
Ohne nicht, aber Delphi führt soeine Liste bereit.

Zitat:

Zitat von SneakyBagels (Beitrag 1374221)
Teil 2 könnte ich dann Screen.Forms[] übergeben.

Nein!

Die Indize sind nicht fest und Ändern sich ständig.
Erstmal beim Erstellen/Freigenben von Forms
und dann schiebt die VCL das aktive Fenster immer auf Position 0, womit sich die Reihenfolge in der Liste ändert. :angle:

Zitat:

Der Label-Name ist etwa 'ClearEditLbl_' + IntToStr(i) + '_NameDesEdits'
Man glaubt es nicht, aber im TLabel gibt es ein Control-Property, wo man das Edit angeben kann.
Erstmal bekommt dann das Edit den Fokus, wenn man seinen Namen (das Label) anklickt
und in deinem Fall kann man mit diesem Property direkt auf das Edit zugreifen.

SneakyBagels 10. Jun 2017 22:06

AW: (dumme Frage) String => TForm?
 
Zitat:

und dann schiebt die VCL das aktive Fenster immer auf Position 0, womit sich die Reihenfolge in der Liste ändert.
Gab es darüber nicht erst letztens ein Thema? Das wusste ich gar nicht, dass hier alles von Zeit zu Zeit auf Position 0 geschoben wird. Gut zu wissen!
Damit wäre mein Vorhaben also erstmal erledigt.

Zitat:

Man glaubt es nicht, aber im TLabel gibt es ein Control-Property, wo man das Edit angeben kann.
Erstmal bekommt dann das Edit den Fokus, wenn man seinen Namen (das Label) anklickt
und in deinem Fall kann man mit diesem Property direkt auf das Edit zugreifen.
Gibt es das auch für TPanels? Ich sehe gerade ich nutze ein TPanel und kein TLabel :oops:

himitsu 10. Jun 2017 22:09

AW: (dumme Frage) String => TForm?
 
Nee, aber wenn das Panel im OI auf die Form gesetzt wurde, bzw. man eine Form als Owner gab, dann alle Forms durchlaufen und da drauf mit FindComponent nach dem Panel suchen.

SneakyBagels 10. Jun 2017 22:15

AW: (dumme Frage) String => TForm?
 
Ich machs aktuell so

- Panel erzeugen und neben Edit positionieren. Name des Panels enthält das dazugehörige Edit
- OnClick zuweisen
- im OnClick frage ich Name ab und suche so mit FindComponent nach dem Edit.

nahpets 10. Jun 2017 23:39

AW: (dumme Frage) String => TForm?
 
Nimm' statt des TPanel ein TLabel.
In die Eigenschaft FocusControl schreibst Du den Namen des zugehörigen TEdits rein.

Im OnClick des TLabel brauchst Du dann nur auf TLabel.FocusControl zugreifen und hast Dein TEdit (oder was Du auch sonst da so zugewiesen hast).
Das dürfte deutlich einfacher, flexibler und pflegeleichter sein, als TPanel und dann über Namenskonventionen suchen gehen.

himitsu 11. Jun 2017 00:32

AW: (dumme Frage) String => TForm?
 
Nja, im Prinzip hast du da doch eine "Komponente, welche das Verhalten kapselt und diese Komponente merkt sich die Referenzen auf das, was sie erstellt hat und auf das zugewiesene Edit.
Und schon muß garnichts gesucht werden.

Uwe Raabe 11. Jun 2017 06:59

AW: (dumme Frage) String => TForm?
 
Zitat:

Zitat von nahpets (Beitrag 1374230)
In die Eigenschaft FocusControl schreibst Du den Namen des zugehörigen TEdits rein.

Im OnClick des TLabel brauchst Du dann nur auf TLabel.FocusControl zugreifen und hast Dein TEdit (oder was Du auch sonst da so zugewiesen hast).

Und funktioniert auch mit Tastatur-Shortcuts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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