![]() |
weiterlaufen während showmessage()
Hallo,
ich möchte dem User meines Programmes gerne etwas mitteilen, ohne das während dessen das Programm stehen bleibt. Am liebsten wäre es mir, wenn das ganze als popup laufen könnte, nicht als label. ein wenig pseudocode sagt mehr, als tausend worte:
Delphi-Quellcode:
P.S.: mit suchen hab ich es schon versucht, aber irgendwie wohl nicht die passenden suchwörter gefunden...
procedure Tform1.ontimer
begin timer.enabled:= false; // tu was if bedingung then //benachrichtige user z.B. Showmessage // das fenster sollte aber möglichst nicht bei jedem timer ausgelöst werden, sondern nur, wenn keines offen ist... timer.enabled:= true; end |
Re: weiterlaufen während showmessage()
Das ist meines Wissens nicht möglich. Du könntest ein neues Formular erstellen und dieses anzeigen. Dann müssten die Prozeduren der Hauptform weiteraebeiten.
|
Re: weiterlaufen während showmessage()
das wär natürlich höchst schade. gibt es denn eine möglichkeit, wenn man die forderung nach "warnung nicht doppelt öffnen" fallen lässt? primär geht es mir erst einmal darum, dass das programm weiterläuft, vor allem der Timer weiterläuft. Buttonklicks und andere Benutzereingaben können meinentwegen gerne erst abgearbeitet werden, wenn die warnmeldung weggeklickt ist.
|
Re: weiterlaufen während showmessage()
Du könntest mit Threads arbeiten. Schau mal unter
![]() Aber meineswissens gibt es keine einfache möglichkeit, das Programm während der anzeige einer MessageBox weiterlaufen zu lassen. Evtl gehts ja über SendMessage oder dergleichen, womit ich mich aber nicht so auskenne. |
Re: weiterlaufen während showmessage()
Zitat:
Gruss, Lizzy |
Re: weiterlaufen während showmessage()
hatte gehofft, dass es eine Lösung mit 1-2 befehlen gibt. Hab es nun aber über ein neues formular gebastelt, das erste mal, dass eine anwendung bei mir aus 2 formen bestehet. Und siehe da, es klappt und war gar nicht so schlimm ;-) Im Gegenteil, es ist so sogar jetzt noch etwas anwenderfreundlicher geworden.
Vielen dank für eure Hilfe. Gruß Martin. |
Re: weiterlaufen während showmessage()
Wenn du das Formular aber nicht modal anzeigen lässt, verschwindet es im Hintergrund, wenn der Benutzer das darunterliegende Fenster anklickt. Und das ist dann doch wohl nicht so gedacht oder? Ein modales Fenster hat nun mal die Eigenschaft, dass es erst weiterget, wenn man es schließt.
|
Re: weiterlaufen während showmessage()
wie wäre es die 2. Form dann auf StayOnTop zu setzen und die Hauptform auf visible := false zu setzen?
|
Re: weiterlaufen während showmessage()
Weil man dann auch nicht mit einem anderen Fenster weiterarbeitenn kann, weil dein Fenster dann immer im Weg ist.
|
Re: weiterlaufen während showmessage()
Zitat:
Gruss, Lizzy |
Re: weiterlaufen während showmessage()
Wie währe es den so:
Delphi-Quellcode:
implementation
{$R *.dfm} var ShowMyMessage: Boolean = FALSE; procedure TForm1.Timer1Timer(Sender: TObject); begin // Anderer Code if Bedingung then begin if not ShowMyMessage then begin ShowMyMessage := TRUE; MessageBox(Handle, 'Hi', 'Information', {MB_TOPMOST or} MB_ICONINFORMATION or MB_OK); end; end; // Anderer Code end; |
Re: weiterlaufen während showmessage()
Er will aber, das das Programm weiterläuft (weiterarbeitet), während die Meldung angezeigt wird.
|
Re: weiterlaufen während showmessage()
Hallo,
du könntest es auch so machen:
Delphi-Quellcode:
CheckBox2.checked wäre deine Bedingung
private
{ Private-Deklarationen } f: TForm; { ... } procedure TForm1.CheckBox1Click(Sender: TObject); begin Timer1.Enabled := CheckBox1.Checked; end; procedure TForm1.Timer1Timer(Sender: TObject); begin If CheckBox2.Checked then begin If not f.Visible then f.Show; end else begin f.Hide; end; Label1.Caption := TimeToStr(now); end; procedure TForm1.FormCreate(Sender: TObject); begin f := CreateMessageDialog('Meldung', mtWarning, []); f.Height := 75; end; und die checkBox1 diente mir nur als ein/ausschalten des timers. ach ja - über CreateMessageDialog bekommst du eine TForm. Und diese kannst du, wenn du es willst, nach Herzenslust ändern. z. B.:
Delphi-Quellcode:
[edit]
f.color := blue;
etc. die Zeile:
Delphi-Quellcode:
dient nur dazu, dass man sieht dass das Prog weiterläuft
Label1.Caption := TimeToStr(now);
|
Re: weiterlaufen während showmessage()
Vielen Dank für eure antworten.
ich hab es so ähnlch gehandhabt, wie Helmi vorgeschlagen hat, sprich mit show und hide gearbeitet. Nur hab ich mein eigenes Formular, in dem ich mit ein paar Labels ein paar Statusmeldungen ausgebe. Aber CreateMessageDialog kann man sich mal gut merken. Es soll schon so sein, dass während des dies warnfenster offen ist, andere eingaben im Hauptformular getätigt werden können, bzw sogar sollen, damit die fehlermeldung nicht mehr auftritt. |
Re: weiterlaufen während showmessage()
Zitat:
|
Re: weiterlaufen während showmessage()
also bisher hat bei mir Messagebox auch immer dazu geführt das der Source hinter dem Aufruf erst ausgeführt wird wenn der Dialog geschlossen wird.
Es gibt aber auch noch die Möglichkeit mit PostMessage an die eigene Anwendung eine Message zu schicken und bei Empfang der Message ShowMessage aufzurufen. |
Re: weiterlaufen während showmessage()
@Gummibärchen, ich bezog mich nur auf das Timerbeispiel.
Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const WM_MYMESSAGE = WM_USER + $000001; type TMyMessage = Record // foo end; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure WMMyMessage(var M: TMyMessage); message WM_MYMESSAGE; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMMyMessage(var M: TMyMessage); begin ShowMessage('Hi'); end; procedure TForm1.Button1Click(Sender: TObject); begin PostMessage(Handle, WM_MyMessage, 0, 0); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 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