Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi showmodal Fenser ansprechen ? (https://www.delphipraxis.net/72237-showmodal-fenser-ansprechen.html)

Karstadt 27. Jun 2006 15:37


showmodal Fenser ansprechen ?
 
Hallo. Ich habe ein Formular mit Showmodal Aufgerufen. Nun will ich nach diesen Aufruf eine Komponente anprechen.... geht das? wichtig ist, das erst showmodal kommt und erst dann zuweisung.

mr.winkle 27. Jun 2006 15:41

Re: showmodal Fenser ansprechen ?
 
Zitat:

Zitat von Karstadt
Hallo. Ich habe ein Formular mit Showmodal Aufgerufen. Nun will ich nach diesen Aufruf eine Komponente anprechen.... geht das? wichtig ist, das erst showmodal kommt und erst dann zuweisung.

meinst du sowas wie

Delphi-Quellcode:
//[...]
form2.showmodal;
form2.edit1.text:='Ist das ein Zugriff?';
//[...]

Karstadt 27. Jun 2006 15:44

Re: showmodal Fenser ansprechen ?
 
Ja. Aber wenn ich das Fenster schliesse, erst dann erfolgt


Delphi-Quellcode:
form2.edit1.text:='Ist das ein Zugriff?';
Ich muss aber das gleiche Fenster öffnen aber mit unterschiedlichen Sql.abfragen

himitsu 27. Jun 2006 15:45

Re: showmodal Fenser ansprechen ?
 
Wenn du ein Form als ShowModal aufrufst, dann bleibt der entsprechende Thread dort solange hängen, bis die Form wieder geschlossen wurde.

Also alles was danach im Code steht, wird erst nach dem Schließen der Form ausgeführt (es sei denn du lagerst vorher was in einen anderen Thread aus).

ManuMF 27. Jun 2006 15:48

Re: showmodal Fenser ansprechen ?
 
Hallo,

wenn du nicht gerade ModalResult brauchst, kannst du auch folgendes schreiben:
Delphi-Quellcode:
Form1.Enabled := false;
Form2.Show; // ohne Modal
Form2.WasWeisIch;

...

Form2.Close;
Form1.Enabled := true; // <- wichtig, nicht vergessen
// oder in Form2.onClose
Gruß,
ManuMF

Karstadt 27. Jun 2006 16:07

Re: showmodal Fenser ansprechen ?
 
Delphi-Quellcode:
Show;
mache Irgendwas
Visible := False;
Showmodal;
so würde das auch gehen, blos das fenster öffnet sich zwei mal nach einnander :(

Die andere Lösung schaue ichmir auch an.

Karstadt 27. Jun 2006 16:10

Re: showmodal Fenser ansprechen ?
 
Ist das möglich ein Fenser zu erstellen, ohne es sichtbar zu machen?

Form.Create(nil). Macht das z.B sichtbar.

ManuMF 27. Jun 2006 16:13

Re: showmodal Fenser ansprechen ?
 
Hallo,

das ShowModal musst du dann natürlich weglassen ;-)

Gruß,
ManuMF

Karstadt 27. Jun 2006 16:18

Re: showmodal Fenser ansprechen ?
 
das ist ja der Hacken. Das muss schon MODAL geöfnet sein. Damit der Benuzter das Fenster beenden mus, um weiter zu machen. Aber beim Aufruf soll ich auf die Komponenten zugrefen können.

RavenIV 27. Jun 2006 16:29

Re: showmodal Fenser ansprechen ?
 
Zitat:

Zitat von Karstadt
das ist ja der Hacken. Das muss schon MODAL geöfnet sein. Damit der Benuzter das Fenster beenden mus, um weiter zu machen. Aber beim Aufruf soll ich auf die Komponenten zugrefen können.

hast Du Dir den Vorschlag von ManuMF eigentlich angesehen / ausprobiert?
Das ist eine Alternative zu ShowModal.

Helmi 27. Jun 2006 16:32

Re: showmodal Fenser ansprechen ?
 
Hallo,

was ist, wenn du die Aufrufe einfach drehst:

also so (Beispiel):

Delphi-Quellcode:
with Form2 do
  begin
    Edit1.Text    := 'hallo';
    Label1.Caption := 'winke';
    ShowModal;
  end;
So hast du 1. die Daten übergeben und 2. das Fenster Modal geöffnet

Karstadt 27. Jun 2006 16:43

Re: showmodal Fenser ansprechen ?
 
...davor muss ich das Fenster aber Createn

:(

shmia 27. Jun 2006 17:08

Re: showmodal Fenser ansprechen ?
 
Mal was ganz grundsätzliches zu modalen Formularen:

Modale Formulare sollten so benützt werden
1.) Formular mit Create erzeugen
2.) Alle Anfangswerte bestücken
3.) Funktion ShowModal aufrufen und das Ergebnis am Besten gleich auswerten
Delphi-Quellcode:
   case formX.ShowModal of
      mrOK: // OK-dedrückt; Ergebnisse auslesen
      begin
      end;
      mrAbort:
      begin
      end;
   end;
4.) Ergebnisse des Formulars auslesen und versorgen (speichern)
5.) Fformular zerstören

Ein Login-Formular bietet z.B. User und Passwort als Eingabefelder an.
Diese Daten sollten über Properties gekapselt werden.
Delphi-Quellcode:
   property UserName:string read GetUserName write SetUserName;
....
function TModalForm.GetUserName:string;
begin
   result := EditUserName.Text;
end;
procedure TModalForm.SetUserName(const Value:string);
begin
   EditUserName.Text := value;
end;

Phoenix 27. Jun 2006 17:30

Re: showmodal Fenser ansprechen ?
 
Um zurück zur Ursprünglichen Frage zu kommen:

Zitat:

Zitat von Karstadt
Hallo. Ich habe ein Formular mit Showmodal Aufgerufen. Nun will ich nach diesen Aufruf eine Komponente anprechen.... geht das? wichtig ist, das erst showmodal kommt und erst dann zuweisung.

Um es ganz kurz und korrekt zu machen: Nein, genau das geht explizit nicht - und genau damit das nicht geht gibt es ShowModal und kein normales Show.

Karstadt 28. Jun 2006 08:46

Re: showmodal Fenser ansprechen ?
 
Hallo. Ich habe das gelöst. Es war MEIN Fehler bei der Eigenschaft VISIBLE des Forms.

Delphi-Quellcode:
var Formular: Tf_kontakte;
begin
  Formular := Tf_kontakte.Create(nil); // hier habe ich vergessen beim Formular Kontakte die Eigenschaft
                                       // visible auf FALSE zu setzen.
  Formular.e_suchbegriff.Text := 'AAAAAA'; // Hier greife ich auf die Komponente
  Formular.ShowModal;                // Hier Rufe ich das Fenster als MODAL auf.
  Formular.Free;
end;
Am morgen sind die probleme von gestern leich zu lösen ;)

Dank für Ihre Tipps.

SirThornberry 28. Jun 2006 09:28

Re: showmodal Fenser ansprechen ?
 
ich mach bei sowas in der Regel eine Public Methode in das Fenster was Modal geöffnet werden soll welche dann so aussieht
Delphi-Quellcode:
function Tf_Kontakte.Execute(ASearchText: String): Boolean;
begin
  e_suchbegriff.Text := ASearchText;
  result := ShowModal = mrOK;
end;
und dann wird diese Public-Methode aufgerufen. Vorteil von dieser Variante ist das man auch auf Private-Elemente beim Initialisieren was zuweisen kann.

Meist mach ich dann noch zusätzlich eine Class-Methode um mir das Creieren zu ersparen:
Delphi-Quellcode:
class function Tf_Kontakte.ExecuteClass(ASearchText: String): Boolean;
var lForm: TfKontakte;
begin
  result := False;
  lForm := Tf_Kontakte.Create(nil);
  try
    result := lForm.Execute(ASearchText);
  finally
    lForm.Free;
  end;
end;

mquadrat 28. Jun 2006 09:32

Re: showmodal Fenser ansprechen ?
 
Bin ich eigentlich der einzige der sich wundert, dass das Formular beim Erzeugen angeblich schon angezeigt werden soll? Also bei mir nicht :gruebel:

SirThornberry 28. Jun 2006 09:34

Re: showmodal Fenser ansprechen ?
 
@mquadrat: Es kommt darauf an was in der DFM steht, also im Objectinspektor eingestellt wurde. Ansonsten bin ich mir auch nicht sicher ob es sofort angezeigt wird weil ja noch keine Messages verarbeitet werden.

morri 28. Jun 2006 09:35

Re: showmodal Fenser ansprechen ?
 
Ich habe mich auch gewundert aber noch nichts gesagt ;)
Das visible:=false ist für mich auch quatsch.
Es wird erst createt, dann mit show oder showmodal in diesem Falle angezeigt.

mquadrat 28. Jun 2006 09:36

Re: showmodal Fenser ansprechen ?
 
Stimmt, aber Visible wird doch per Default immer erstmal auf false gesetzt, wenn man ein neues Formular anlegt.. Macht auch irgendwie überhaupt keinen Sinn das zu ändern. Aber egal, sein Problem ist ja gelöst ;)

SirThornberry 28. Jun 2006 09:37

Re: showmodal Fenser ansprechen ?
 
das "visible := false" ist wirklich überflüssig. Wie bereits geschrieben dürfte das Formular gar nicht sichtbar werden wenn es im OI richtig eingestellt wurde.
@mquadrat: Bei D2006 ist die glaub ich nicht mehr der Fall. Zumindest mein ich mich erinnern zu können das ich letztens ein neues Form dem Projekt hinzgefügt habe und dies war sofort sichtbar.

mquadrat 28. Jun 2006 09:39

Re: showmodal Fenser ansprechen ?
 
@SirThornberry
Doch ist auch in D2006 so, hab grad nachgeschaut :D

Karstadt 28. Jun 2006 09:41

Re: showmodal Fenser ansprechen ?
 
...danke :)

Karstadt 28. Jun 2006 09:56

Re: showmodal Fenser ansprechen ?
 
Zitat:

Zitat von mquadrat
Stimmt, aber Visible wird doch per Default immer erstmal auf false gesetzt, wenn man ein neues Formular anlegt.. Macht auch irgendwie überhaupt keinen Sinn das zu ändern. Aber egal, sein Problem ist ja gelöst ;)

..nun habe ich das. Wenn du den Formstyle auf MDICHILD änderst, wird die Eingenschadft VISIBLE automatisch auf True gesetz. Das war bei mir der Fall....Dann habe ich das rückgängig gemacht, aber die eigenschaft Visible nicht beachtet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz