AGB  ·  Datenschutz  ·  Impressum  







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

ShowModal mit Programmablauf und selbst schließen?

Ein Thema von HJay · begonnen am 10. Mär 2011 · letzter Beitrag vom 11. Mär 2011
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 02:46
Die Gefahr besteht derzeit bei mir nicht, glaube ich. Aber dennoch, danke für die Warnung.
Bitte.

Derzeit ... und wenn du daran in 2 Jahren was änderst, dann hast'e dieses hier bestimmt schonwieder vergessen.

PS: Ich würde zwar auch eher zu "einfach" tendieren,
aber das wäre jetzt nicht einfach, sondern billig fehleranfällig.


Delphi-Quellcode:
TForm5 = class(TForm)
  procedure FormShow(Sender: TObject);
  procedure WMMachWas(var Msg: TMessage); message WM_USER+1;
private
  { Private-Deklarationen }
public
  { Public-Deklarationen }
end;

procedure TForm5.FormShow(Sender: TObject);
begin
  ...
  PostMessage(Handle, WM_USER+1, 0, 0);
  ...
end;
PS: So wäre es sogar übersichtlicher, da der Bearbeitungsweg "eindeutig" ist.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Mär 2011 um 02:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 06:38
Hallo HJay,

meiner Meinung nach, ist es auch ungeschickt jedes Mal den Datenbank-Zugriff zu unterbrechen um die Anzeige zu aktualisieren. Ein Mehrwert hat der Benutzer dadurch nicht, im Gegenteil das ganze dauert nur unnötig lange weil man erst feststellen muss wie viel Datensätze verarbeitet werden sollen. Eine einfache Massagebox mit den Hinweis, dass der PC arbeitet würde dann reichen.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 07:07
Hallo,

ich mache das so.

ins FormActivate kommt der Code, etwa so

Delphi-Quellcode:
Application.ProcessMessages
// der Code
Zitat:
Etwa so: Wenn ich fertig bin schick mir ne message das ich mich beenden kann, weil close im onActivate nicht geht!
Close nicht, aber

PostMessage(Handle, WM_CLOSE, 0, 0);
Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.361 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 07:14
Hi,

Himitsu hat das Beispiel zwar schon im Ansatz geschrieben,
ich komplettiere mal:

Code:

Interface
Uses
   ...
Const
  FM_STARTED = WM_USER + 1; // Formular komplett erzeugt
...
  protected
    procedure FmStarted(var Message: TMessage); message FM_STARTED; // MethodenName frei, Konstante für MessageId wichtig
implementation
...
procedure TfrmModal.FmStarted(var Message: TMessage);
begin
  // Verarbeitung
  ModalResult := mrOK; // oder Close
end;
// und ntürlich der Aufruf von PostMessage wie bei Himitsu
Ich habe hier allerdings Bedenken.
Falls in der Verarbeitung z.B. wegen ScrollBar ain Application.ProcessMessages kommt, funktioniert es wieder nicht.

Aber, Probieren geht über ...

Frank
Frank Reim
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 10:02
Und nun? Wenn er beim einlesen der Daten evtl noch ein Try except block drin hat(?) oder es generell zur Unterbrechung kommt steht seine TFormProgress da und er kann nur noch eins machen strg+alt+del um sein Prog abzuschiessen. Oder mann macht nun noch zusätzliches rein um auch noch dieses abzufangen damit er wieder an seine MainForm kommt!
Das mag bei Ihm ja alles gehen. Wenn es dann aber auf eine anderen Maschine kommt ......

Es ist und bleibt ne unsaubere Lösung!

Ich schreibe dies nicht weil ich mich wichtig tun will, sondern aus eigener Erfahrung!

Ich kann nur nicht verstehen warum man von einem falschen Ansatz her nach Lösungen sucht um diesen evtl noch zu verschlimmern

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.361 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 10:51
Es ist und bleibt ne unsaubere Lösung!
Was ist die saubere Lösung? Der Timer?

Ich finde es sehr vermessen, alles, was nicht den eigenen Vorlieben entspricht, als unsauber zu deklarieren.

Auszug aus der Forms:
Code:
Show;
try
  SendMessage(Handle, CM_ACTIVATE, 0, 0);
  ModalResult := 0;
  repeat
    Application.HandleMessage;
    if Application.Terminated then ModalResult := mrCancel else
      if ModalResult <> 0 then CloseModal;
  until ModalResult <> 0;
Wie man sieht, wird nach allen Ereignissen (Show, Activate etc.) ModalResult auf 0 gesetzt.
Schliessen hier nicht möglich.
Das nächste ist HandleMessage - ProcessMessage und Idle.

Was ist nun unsauber daran, genau hier einzusteigen?

Sowohl Timer als auch PostMessage als auch Application.OnIdle kann man verwenden.

Ich persönlich bevorzuge weiterhin OnIdle, bezeichne die anderen Lösungen aber nicht gleich als unsauber.

Ich habe früher dafür auch einen Timer benutzt.
Aber man muss doch die Zeit gut wählen, damit er wirklich fertig ist (auch ProcessMessages braucht Zeit).

Den Fragesteller zu verunsichern, kann ja nicht das Ziel sein.

Frank
Frank Reim
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: ShowModal mit Programmablauf und selbst schließen?

  Alt 11. Mär 2011, 11:29
Ne der Timer nicht!
Daten da holen wo ich sie brauche in Main! TFormprogress nur als Anzeige!
fertig!
Schon spare ich mir das ganze konstrukt ein!

Gruss alfold
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:27 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