Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Interagieren mit mehreren Forms (https://www.delphipraxis.net/206217-interagieren-mit-mehreren-forms.html)

ratmalwer 30. Nov 2020 21:40

Delphi-Version: 2010

Interagieren mit mehreren Forms
 
Hallo

ich habe eine Form (Form1) mit einem Stringgrid.
Daneben eine Form (Form9) welche mit dem Stringrid von Form1 interagiert z.b:
Code:
Form9.FotoAnzeigen(fileliste[Form1.stringGrid1.row].Quellpfadfilename);
Jetzt möchte ich eine neue Form (Form2) erstellen, welche dann auch mit Form9 interagiert.
Dann möchte ich variabel switchen können zwischen Form1.StringGrid1 und Form2.StringGrid1.

Ungefähr so:
Code:
if form1.active then  FormX:=Findcomponent('Form1') end;  
if form2.active then  FormX:=Findcomponent('Form2') end;  
Form9.FotoAnzeigen(fileliste[FormX.stringGrid1.row].Quellpfadfilename);
Gibt es eine Möglichkeit dies dynamisch bei Form9.open zu machen? Und was wäre der richtige Befehl.
Danke für einen Tipp.

Markus

hoika 1. Dez 2020 05:56

AW: Interagieren mit mehreren Forms
 
Hallo,
benutze ein lokale StringGrid-Variable, die entweder auf das StringGrid in Form1 oder Form2 zeigt.

himitsu 1. Dez 2020 09:35

AW: Interagieren mit mehreren Forms
 
FindComponent ist eine Methode (keine Funktion) und über xxx.FindComponent kannst du sagen, wo rauf die Komponente (z.B. dein Grid auf welcher Form) gesucht werden soll.

Und Benutze bitte "verständliche" Bezeichner,
oder kannst du ohne lange drüber nachzudenken und nachzugucken sagen was Form 1 bis 9 sind/machen?

Nur zur Sicherheit:
Form1 und Form9 sind unterschiedlich und sehen nicht zufällig gleich aus, machen das Selbe,
und sollen nur "doppelt" gleichzeitig angezeigt werden?

ratmalwer 1. Dez 2020 16:51

AW: Interagieren mit mehreren Forms
 
Hallo Hoika

ja, ich glaube das ist der Weg.
Jedoch brauche ich wohl zuerst den Pointer auf die Form. Und dort enden meine Kenntnisse:

Code:
var
FormX : Tform;

on show

FormX := Form1;  // wie mache ich hier den Pointer?
oder
FormX := Form2;  // wie mache ich hier den Pointer?
Vielleicht gibts ja einen Weg, das sendende Form abzufragen.

hoika 1. Dez 2020 17:03

AW: Interagieren mit mehreren Forms
 
Hallo,
nix mit FormX.
Du übergibst doch Form9 nur ein StringGrid.

ratmalwer 1. Dez 2020 17:47

AW: Interagieren mit mehreren Forms
 
ja aber wahlweise von Form1 oder Form2 (den Namen: Stringrid1 könnte ich ja gleich für beide verwenden, da ich die Struktur gleichhalte)

ratmalwer 1. Dez 2020 18:27

AW: Interagieren mit mehreren Forms
 
Nachtrag:
vielleich ist es doch nicht klar, was ich will.

Ich habe eine Form:Fotoanzeige (Form9) welche ein Stringgrid abarbeitet welches sich in Form:Hauptfenster (form1) befindet. Funktionen wie: vor, zurück, markieren etc. können so ausgeführt werden.

Jetzt möchte ich diese Anzeige mit den gleichen Funktionen benutzen um ein anderes Stringgrid mit gleicher Struktur abzuarbeiten, welches in einem anderen Form:Fotoselektion (Form2) ist, ohne den ganzen Code 2x redundant zu schreiben.

Also möchte ich nur die Form von Form1 auf Form2 switchen können und so das andere Stringgrid anzusprechen. Das Stringgrid kann oder soll sogar gleich heissen.

himitsu 1. Dez 2020 18:29

AW: Interagieren mit mehreren Forms
 
Zitat:

// wie mache ich hier den Pointer?
Garnicht. (Objekte sind bereits Pointer)
Aber für die Variable brauchst natürlich einen Typ, den beide Forms als Vorfahren haben.
z.B. TForm

Oder man nimmt einen eigenen Vorfahren (von TForm abgeleitet) für Variable und die Forms.
Dort kann man dann auch das Grid (die Variable des Grids), oder eine Funktion auf das Grid, reintun
und dann kann man ohne Cast oder FindComponent auf Grid zugreifen.

Oder man fügt ein Interface in die Forms ein, für den Zugriff auf das Grid, und FormX wird dann vom Typ dieses Interfaces. (Delphi-Referenz durchsuchenSupports)

ratmalwer 1. Dez 2020 18:44

AW: Interagieren mit mehreren Forms
 
Danke himitsu

verbal habe ich es verstanden.
Ob ichs umsetzen kann ohne ein Codeschnipsel weiss ich noch nicht.

ratmalwer 1. Dez 2020 19:43

AW: Interagieren mit mehreren Forms
 
Nochmals Danke hoika und himitsu

Ihr hattet beide recht... Grosse Probleme können eine einfache Lösung haben.

Code:
SGX : TstringGrid;

wahlwweie
 sgX  := Form1.StringGrid1;
 sgX  := Form2.StringGrid1;

dann einfach abfragen nach
sgX.Row
:-D


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