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 Fenster verschwindet (https://www.delphipraxis.net/1971-fenster-verschwindet.html)

Hansa 1. Jan 2003 15:42


Fenster verschwindet
 
Hi,

ich kapiere immer noch manche einfachen Sachen in Delphi nicht. :P
Code:
  if (Key = VK_F9) AND (Edit1.Enabled) then begin
    Form3.Show;
    Form3.Edit1.SetFocus;
    Form3.Hide;
  end;
Hier soll einfach nur mit F9 ein Fenster aufgehen, in das man etwas eingibt. Das Fenster besteht nur aus einer Form und einem Edit. Das Fenster blinkt kurz auf und verschwindet wieder. Eingeben kann ich nichts.

Gruß
Hansa

Hansa 1. Jan 2003 15:48

Hi,

noch etwas in diesem Zusammenhang : Ich habe jetzt mehrere Forms mit einem Edit-Feld. Das heißt bei jeder Form Edit1. Das könnte doch zu Verwechslungen führen. Wie macht ihr das. Benennt ihr die alle um ? Die Arbeit habe ich mir bis jetzt nämlich nicht gemacht.

Gruß
Hansa

phlux 1. Jan 2003 16:01

Hi!
Umbenennen ist so ne Sache manche machen es manche nicht :|
Aber mit deiner Form kann das auch nichts werden, wenn du sofort nachdem du sie mit show zeigst wieder mit hide verschwinden lässt. Mein Tipp Bei der zu zeigenden Form im OnEnter Event des Edit-Feldes abfragen ob Return gedrückt wurde und dann die Form wieder verstecken.

Christian Seehase 1. Jan 2003 16:07

Moin Hansa,

wenn das Fenster weiter angezeigt werden soll, musst Du es mit ShowModal anzeigen, ansonsten wird Show ausgeführt, die das Show aufrufende Routine läuft weiter, und ruft kurz danach Hide auf.

Ausserdem finde ich es "aufgeräumter" Komponenten eines Fensters auch in dessen Unit anzusprechen, wie z.B. den SetFocus auf das Edit Feld.
Das gehört, für meinen Geschmack, z.b., in das OnShow von Form3.

Was die Bennung von Komponenten angeht:
Also ich habe mir angewöhnt, alle Komponenten mit aussagekräftigen Namen zu versehen, selbst StaticText Felder.
Von Formularen, Edits, Button usw. mal ganz zu schweigen.
Da ich für so etwas Namenskonventionen habe brauche ich mir da meist nicht mal mühsam einen Namen einfallen zu lassen, der ergibt sich fast automatisch ;-)

Hansa 1. Jan 2003 16:13

Hi,

heute scheint nicht so mein Tag zu sein. :corky:

Code:
procedure TForm3.Edit1Enter(Sender: TObject);
begin
  if (Key = VK_Return) then
    Form3.Hide;
end;
Key kennt er nicht. Wo krieg ich den denn her ? Und gleich noch eine Frage, die gut passt : Habe auf der Haupt-Form nach einen Button angelegt, wo draufsteht F9. Wenn der Button geclickt wird, soll das gleiche passieren, als wenn F9 gedrückt wird.

Gruß
Hansa

phlux 1. Jan 2003 16:17

Sorry, war mein Fehler :twisted: nimm das OnKeyUp Event vom Edit-Feld dafür.

Christian Seehase 1. Jan 2003 16:28

Moin Hansa,

dann musst Du dem OnClick des Buttons die gleiche Routine zuweisen, wie sie beim Druck auf F9 ausgeführt wird.
Ggf. im OnClick aufrufen.

Hansa 1. Jan 2003 16:29

Hi,

das geht jetzt, wie es soll !
Zitat:

Zitat von Christian Seehase
Ausserdem finde ich es "aufgeräumter" Komponenten eines Fensters auch in dessen Unit anzusprechen, wie z.B. den SetFocus auf das Edit Feld.

Hast Recht. In der aufrufenden Unit steht jetzt nur noch Form3.Show. Das geht wohl nicht anders. Du benennst alle Namen um ? Dafür war ich bisher zu faul. Aber ich glaube, ich werde es in Zukunft auch so machen. Das ShowModal, wäre allerdings hier verkehrt, denn das Fenster soll direkt nach der Eingabe wieder verschwinden.

@Phlux : Jo, das OnKeyUp, war das richtige.

Jetzt müßte ich es nur noch hinkriegen, daß bei geclicktem Button dasselbe gemacht wird, wie bei F9. :party:

Gruß
Hansa

phlux 1. Jan 2003 16:36

Eigentliczh würde ich die Routine um die Form zu zeigen ins OnClick-Event des buttons schreiben und dann wenn du im Event wo du abfragst ob F9 gedrückt wurde nur [ButtonName].Click ausführen, so dürfte das hinhauen.

Hansa 1. Jan 2003 16:44

Hi,

Code:
 
 if (Key = VK_F9) AND (Edit1.Enabled) then
   Button1.Click;
In Button1.Click steht nur Form3.Show. Vorher wars umgekehrt. Das da ist etwas eleganter, aber bei Click auf den Button passiert nichts. Bei F9 schon.

Gruß
Hansa[/quote]

phlux 1. Jan 2003 16:56

poste doch mal das komplette OnClick Event des buttons :D

Hansa 1. Jan 2003 17:04

Hi,

@phlux: Daran liegts nicht.

hier liegt der Hund begraben :

Code:
procedure Form1.Edit1Exit(Sender: TObject);
begin
  IF Edit1.text <> '' THEN BEGIN
    Edit1.Enabled := false;
    Transaction.StartTransaction;
    ....
  END
  ELSE BEGIN
    Edit1.Text := '';
    Edit1.SetFocus;
  END;
end;
So siehts jetzt aus. Ursache gefunden Patient noch tot. :mrgreen: Auch wenn ich ein leeres Edit - Feld nicht zulassen will, der Button muß eine Ausnahme bilden, er dient nämlich gerade zum Suchen, falls jemand die Nr. die in das Feld eingegeben werden soll nicht auswendig weiß. Im ButtonClick steht nur Form3.Show.

Gruß
Hansa

phlux 1. Jan 2003 17:13

ahjo dann :lol:

Hansa 1. Jan 2003 17:22

Hi,

Zitat:

Zitat von phlux
ahjo dann :lol:

haha, sehr hilfreich. :wink: Kriege es nicht hin, an den verdammten Button zu kommen, wenn das Feld leer ist.

Gruß
Hansa

phlux 1. Jan 2003 17:34

Sry abermals ich dachte du hättest das problem gelöst, also so wie ich das sehe kommt dein prog wahrscheinlich irgendwie damit durcheinander weil du das editfeld manchmal disablesd. Guck nochmal nach ob im Objektinspektor bei den Events deines F9-Buttons wirklich die Prozedur zum Fensterzeigen eingetragen ist.

Hansa 1. Jan 2003 17:46

Hi,

mühsam ernährt sich das Eichhörnchen. :dancer: Man sehe sich mal weiter oben an, wie es da aussah.

Code:
  ELSE BEGIN
    Edit1.Enabled := true;
    Edit1.Text := '';
    IF NOT Button1.Focused THEN
      Edit1.SetFocus;
    Button1.Enabled := true;
    Button2.Enabled := true;
  END;
Jetzt muß ich mir aber noch einen Button vorknöpfen, den ESC Ende Button. Da kriege ich bestimmt ähnlichen Ärger. :twisted:

Gruß

P.S.: Das ist die Stelle, falls Edit1.Text = '' ist.
Hansa

Hansa 1. Jan 2003 18:08

Hi,

könnt ihr mir noch einmal helfen? Ich glaube dann hab ichs gepackt.

Code:
procedure Form1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  IF NOT LiefModul.LiefDS.IsEmpty THEN BEGIN
    if MessageDlg('Soll der Datensatz gespeichert werden ?',
      mtInformation, [mbYes, mbNo], 0) = mrYes then begin
      LiefModul.LiefDS.post;
      LiefModul.TransAction.Commit;
    END
    ELSE
      LiefModul.Transaction.Rollback;
  END;
  LiefStamm.FormShow (Sender);
end;
Ich weiß nicht wo und wie ich das unterbringen soll. Wie gesagt brauche ich noch einen Ende-Button. Wie kriege ich jetzt genau dieses FormClose in das OnClick-Event des Buttons ? Stecke vor allem wegen des zweiten Parameters Action fest. Onclick hat ja nur Sender. Den Quelltext zu kopieren ginge bestimmt auch, aber das ist wohl nicht der Sinn. Naja, andere die Delphi noch nicht so gut können, kämpfen am Anfang mit den Buttons, ich Idiot fange mit Interbase-SQL-Datenbanken im Netzwerk an. :mrgreen:

Gruß
Hansa

Sebastian Nintemann 1. Jan 2003 18:57

Hallo, was willst du jetzt genau wissen? In die Close procedure kommst du mit
Code:
close;
Sorry wenn das nicht das war was du wissen wolltest, ich hab nur die letzten beiden Postings durchgelesen.

Gruß, Sebastian

Hansa 1. Jan 2003 18:57

Hi,

indem ich es einfach genau umgekehrt mache ! Da bin ich sogar selber drauf gekommen. :lol:

Code:
procedure TLiefStamm.FormClose(Sender: TObject; var Action: TCloseAction);
  BEGIN
    Button2Click (Sender);
  END;

procedure TLiefStamm.Button2Click(Sender: TObject);
begin
  IF NOT LiefModul.LiefDS.IsEmpty THEN BEGIN
    if MessageDlg('Soll der Datensatz gespeichert werden ?',
      mtInformation, [mbYes, mbNo], 0) = mrYes then begin
      LiefModul.LiefDS.post;
      LiefModul.TransAction.Commit;
    END
    ELSE
      LiefModul.Transaction.Rollback;
  END;
  LiefStamm.FormShow (Sender);
end;
Diese Baustelle ist nahezu abgeschlossen. Also nochmals danke für die Hilfe. Alleine wäre ich noch lange nicht fertig. Ich mußte das hier einmal durchexerzieren, damit ich eine Vorlage für ähnliche Fälle habe.

Gruß
Hansa


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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-2025 by Thomas Breitkreuz