AGB  ·  Datenschutz  ·  Impressum  







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

Eingabefenster automatisch anzeigen lassen

Ein Thema von zeras · begonnen am 19. Nov 2021 · letzter Beitrag vom 22. Nov 2021
Antwort Antwort
Seite 2 von 2     12   
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Eingabefenster automatisch anzeigen lassen

  Alt 21. Nov 2021, 00:45
Hi zusammen

Ich werfe da mal das Property Popupmode in den Raum...

In der Createprozedure eines Datenmoduls rufe ich folgende Prozedur auf:
Delphi-Quellcode:
function TDMLSQLiteOfficerFE.DedectBiggestFreeSpace: Char;
  var i :integer; PopupWindow: TPopupWindow;
begin
  PopupWindow := TPopupWindow.Create(Self);
  PopupWindow.PopupMode := pmExplicit;
  PopupWindow.PopupParent := HomeOfficerFeMain;
  PopupWindow.RzPageControl1.ActivePage := PopupWindow.RzPageControl1.Pages[0];
  PopUpWindow.Position := poMainFormCenter;
end;
Natürlich könnte das Popupfenster auch automatisch erzeugt werden. Aber dann existiert es auch dann, wenn es gar nicht gebraucht wird.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#12

AW: Eingabefenster automatisch anzeigen lassen

  Alt 21. Nov 2021, 03:26
ok.. Scheint nicht erwünscht daher spare ich mir die vielen bit und bytes

Geändert von venice2 (21. Nov 2021 um 18:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#13

AW: Eingabefenster automatisch anzeigen lassen

  Alt 21. Nov 2021, 06:58
Moin...
Zitat:
Und man kann die 2 Form ganz normal in Create erstellen nachdem das Hauptfenster Sichtbar ist. Warum sollte das nicht gehen?
Klar kannst du die Form im Create oder Show erzeugen. Du kannst die 2. Form aber im OnShow nicht über die Mainform Modal anzeigen! Im OnShow ist die Form zwar Visible=True aber menschlich noch nicht sichtbar. Erst wenn OnShow durchlaufen ist!
Zitat:
Das Hauptfenster sollte schon zu sehen sein und wenn das fertig aufgebaut ist, sollte das Eingabefenster aufpoppen
Zitat:
if fEntermanu.ShowModal = mrOK then begin
...ließ das nochmal...
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  Unit2;

type
  TForm1 = class(TForm)
    lblBlubb: TLabel;
    procedure FormShow(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var
  Form: TForm;
begin
  Form := Tform2.Create(nil);
  try
    Form.ShowModal; // das ist der Knackpunkt!
  finally
    Form.Free;
  end;
end;

end.
PS:
Zitat:
Ich schicke euch gerne noch die Kompilierte Exe wenn ihr das Projekt nicht zusammenbauen könnt.
...das grenzt an Beleidigung!
Angehängte Dateien
Dateityp: zip Test.zip (6,6 KB, 1x aufgerufen)

Geändert von haentschman (21. Nov 2021 um 07:08 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#14

AW: Eingabefenster automatisch anzeigen lassen

  Alt 21. Nov 2021, 07:36
sorry zuviel Aufwand für nichts.

Geändert von venice2 (21. Nov 2021 um 18:07 Uhr) Grund: Tippfehler
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.633 Beiträge
 
Delphi 12 Athens
 
#15

AW: Eingabefenster automatisch anzeigen lassen

  Alt 21. Nov 2021, 17:11
Danke für eure Info.
Ich dachte, es gibt nur eine Lösung. Aber da habe ich mich offenbar getäuscht.
Getestet habe ich erst einmal die Lösunghier.
Damit habe ich mein Problem leider nicht lösen können. Vielleicht liegt das auch an der Komponente, die ich von TMS nutze.
Das eine Problem ist ja, dass sich die Fenster nicht immer die Position merken. Dazu nutzte ich ja FormSize.
Ein weiteres Problem ist, dass teilweise das Hauptfenster wieder aufpoppt, obwohl ein anderes Fenster mit ShowModal angezeigt wurde.
Die Probleme passieren aber nicht immer, sondern sporadisch. Deshalb dachte ich, dass es vielleicht an dem Eingabefenster liegt, wie oben beschrieben.
Das sind zwar nur Schönheitsfehler. Aber die wollte ich irgendwann mal behoben haben.
Vielleicht komme ich nächstes Wochenende dazu, eure anderen Lösungen einmal einzubauen.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Eingabefenster automatisch anzeigen lassen

  Alt 21. Nov 2021, 19:17
Hmmm, ich dachte OnShow kam erst nach dem Anzeigen, aber es ist doch vorher.
Ist aber auch etwas verwirrend, da dieses Event intern CM_SHOWINGCHANGED heißt.

Und es wird auch nur aufgerufen, wenn der Status über die VCL geändert wird (Visible, Show oder Hide),
aber nicht wenn man es über die WinAPI daran vorbei ändert (ShowWindow mit SW_SHOWNORMAL oder SW_HIDE).




Und statt einem eigenen Event (siehe "MessageAfterShow"), kann man auch ein Anderes verwenden.

Delphi-Quellcode:
procedure TMyForm.FormShow(Sender: TObject);
begin
  TThread.ForceQueue(nil, procedure
    begin
      //AfterShow(Self);
      Dialog.Execute;
    end);
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (21. Nov 2021 um 19:20 Uhr)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#17

AW: Eingabefenster automatisch anzeigen lassen

  Alt 22. Nov 2021, 09:14
Hier noch eine einfache Variante:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  private
    FFirstDlg: Boolean;
  public
    procedure UpdateActions; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.UpdateActions;
begin
  if not FFirstDlg then
  begin
    FFirstDlg := True;
    ShowMessage('Hallo Welt');
  end;
  inherited;
end;
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Eingabefenster automatisch anzeigen lassen

  Alt 22. Nov 2021, 11:24
Danke für eure Info.
Ich dachte, es gibt nur eine Lösung. Aber da habe ich mich offenbar getäuscht.
Getestet habe ich erst einmal die Lösunghier.
Damit habe ich mein Problem leider nicht lösen können. Vielleicht liegt das auch an der Komponente, die ich von TMS nutze.
Das eine Problem ist ja, dass sich die Fenster nicht immer die Position merken. Dazu nutzte ich ja FormSize.
Ein weiteres Problem ist, dass teilweise das Hauptfenster wieder aufpoppt, obwohl ein anderes Fenster mit ShowModal angezeigt wurde.
Die Probleme passieren aber nicht immer, sondern sporadisch. Deshalb dachte ich, dass es vielleicht an dem Eingabefenster liegt, wie oben beschrieben.
Das sind zwar nur Schönheitsfehler. Aber die wollte ich irgendwann mal behoben haben.
Vielleicht komme ich nächstes Wochenende dazu, eure anderen Lösungen einmal einzubauen.
Die Probleme die Du hast mit dem "welches Fenster ist vorne" könnten auf falsche Fensterparameter hindeuten.
Ich empfehle einfach mal ein neues projekt zu erstellen, eine zweite form erstellen mit visible = false.
OnIdle variante würde ich priorisieren.

Man kann auch das zweite Formular aus der .dpr datei entfernen und über die haupt-unit dynamisch verwalten.
(initialization, finalisation)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Eingabefenster automatisch anzeigen lassen

  Alt 22. Nov 2021, 12:08
Hi zusammen

Ich erlaube mir, nochmal darauf hinzuweisen:
Die Eigenschaft PopupMode steuert, wie sich das Formular der obersten Obene hinsichtlich des Windows-Stils WS_POPUP verhält.
Und zwar genau deswegen:
Zitat:
Die Probleme die Du hast mit dem "welches Fenster ist vorne" könnten auf falsche Fensterparameter hindeuten.
Widersprecht mir, wenn ich mich irre, aber da steht auch etwas von "...hängende Anwendung vermeiden", und damit ist ganz klar das Überdecken des Dialog- oder Modalfensters gemeint.
Ich weiss selbst nicht, wie lange es dieses Property schon gibt, aber dass früher viel mit den (richtigen) Parametern (oder Tricks) hantiert werden musste, ist so. Und nun ist es plötzlich so einfach??

Ach so:
Zitat:
Die Eigenschaft PopupMode wird beim Aufruf der Methode ShowModal automatisch auf pmAuto gesetzt.
Zumindest nach meinem Verständnis muss PopUpMode für ein PopUpFenster aber pmExplicit sein...

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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