Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Message gelöcht ohne timer (https://www.delphipraxis.net/96758-message-geloecht-ohne-timer.html)

SaFu 30. Jul 2007 14:05


Message gelöcht ohne timer
 
Hi kann man es realisieren

Das eine Meldung aufgeht und nach 2 sekunden wieder weg ohne timer.(und ohne auf ok zu drücken)

bei der zeile 7

Delphi-Quellcode:
procedure TForm7.löschenClick(Sender: TObject);
begin
   if MessageDlgPos('Wollen Sie diesen Vertretungsplan wirklich löschen? ',mtInformation,[mbYes,mbNo],0,290,300) = mrYes then
     begin
      DeleteFile(FileListBox1.FileName);
      Showmessage('Datei wurde gelöscht'); // Zeile 7
     end
   else
else
 begin
   if MessageDlgPos('Es wurde kein Vertretungsplan ausgewählt'
     +'',mtInformation,[mbok],0,260,200) = mrok then
 end;
end;

sirius 30. Jul 2007 14:12

Re: Message gelöcht ohne timer
 
:gruebel:
Kannst du uns noch den Rest zeigen? Oder wie kommts, dass hier zwei "else" hintereinanderstehen und deine Vorhersage nicht eintritt?
Woher kommen denn die 2 Sekunden?

SaFu 30. Jul 2007 14:14

Re: Message gelöcht ohne timer
 
Delphi-Quellcode:
procedure TForm7.LöschenClick(Sender: TObject);
  begin
 if FileListBox1.Items.Count > 0 then
  begin
   if MessageDlgPos('Wollen Sie diesen Vertretungsplan wirklich löschen? ',mtInformation,[mbYes,mbNo],0,290,300) = mrYes then
     begin
      DeleteFile(FileListBox1.FileName);
      Showmessage('Datei gelöscht');  
     end
   else
    ComboBox4.SetFocus;
 end
else
 begin
   if MessageDlgPos('Es wurde kein Vertretungsplan ausgewählt'
     +'',mtInformation,[mbok],0,260,200) = mrok then
 end;
Die 2 sekunden hab einfach mal so geschrieben

dajuhsa 30. Jul 2007 14:15

Re: Message gelöcht ohne timer
 
ich würde sagen mit Delay(2000) oder sleep(2000) + Keybd_event

SaFu 30. Jul 2007 14:19

Re: Message gelöcht ohne timer
 
naja mit sleep ist das nicht so gut oder

sirius 30. Jul 2007 14:23

Re: Message gelöcht ohne timer
 
Ach, das war eine Frage :wall: Es sah aus, wie eine Aussage.

Selbst mit Timer ist es nicht ganz einfach einen Messagedlg zu unterbrechen. Messagedlg ist dafür nicht gedacht. Bau dir deine eigenes Fenster zusammen und zeige dies an. Allerdings brauchst du da einen Timer.
Irgendwie musst du ja die Zeit messen. :gruebel:
(Achte darauf, dass dieses Fenster nicht gleich zu Programmstart erzeugt wird!)

Der Messagedlg ist ein Formular was Modal angezeigt wird.

SaFu 30. Jul 2007 14:26

Re: Message gelöcht ohne timer
 
Ah gut das war meine Frage geht also nicht

das hätte ich dann als nächstes gemacht ein eigenes fenster gebaut ist halt sehr umständlich für ne kleine meldung das die datei gelöscht wurde

aber danke

sirius 30. Jul 2007 14:29

Re: Message gelöcht ohne timer
 
Du kannst statt eines eigenen Formulars eben auch in den Components von Application nach dem Messagedlg suchen und ihn löschen.
Edit: Im Event des Timers :mrgreen:

SaFu 30. Jul 2007 14:31

Re: Message gelöcht ohne timer
 
na ich glaube das hört sich jetzt noch komplizierter an

ich mach es dann lieber mit der neuen form oder mit einem Panel

hoika 30. Jul 2007 14:33

Re: Message gelöcht ohne timer
 
Hallo,

alle MessageDlgX rufen intern ja CreateMessageDialog auf,
um den Dialog zu erzeugen.

Return-Wert ist TForm und muss noch mit ShowModal aufgerufen werden.

Ein Free oder .Close der Variable sollte eigentlich klappen.

also

Delphi-Quellcode:
MyDlg: TForm;; // nicht lokal, sondern direkt im aufrufenden Formular definieren.

procedure TForm1.DoShowMessageDlg;
var
  iDlgResult: Word;
begin
  MyDlg:= CreateMessageDialog(... );

  Timer1.Enabled:= True;

  iDlgResult:= MyDlg.ShowModal;
 

  if MyDlg<>NIL then
  begin
    if iDlgResult ...
  end;
end;

procedure TForm1.OnTimer;
begin
  FreeAndNIL(MyDlg);
end;
so in etwa

Heiko

sirius 30. Jul 2007 14:43

Re: Message gelöcht ohne timer
 
Nö, eigentlich nicht:
Den timer setzt du vor dem Befehl Messagedlg auf enabled und das Event sieht so aus
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j:integer;
begin
  for i:=0 to application.ComponentCount-1 do
  if application.Components[i] is TForm then begin
    if TForm(application.Components[i]).Caption='Informationen' then begin
      TForm(application.Components[i]).ModalResult:=mryes; //oder was du hier willst
      timer1.enabled:=false;
      exit;
    end;
  end;
end;
Damit testest du auf den Titel, oder du testest jedes Fenster auf ein Label und auf dessen Inhalt:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i,j:integer;
begin
  for i:=0 to application.ComponentCount-1 do
  if application.Components[i] is TForm then begin
    for j:=0 to application.Components[i].Componentcount-1 do
    if application.Components[i].Components[j] is TLabel then begin
      if TLabel(application.Components[i].Components[j]).Caption=
        'Wollen Sie diesen Vertretungsplan wirklich löschen? ' then begin
         TForm(application.Components[i]).ModalResult:=mryes;
         timer1.enabled:=false;
         exit;
      end;
    end;
  end;
end;

Luckie 30. Jul 2007 14:49

Re: Message gelöcht ohne timer
 
Was macht denn das für einen Sinn? Was soll ein Benutzer mit einem Dialog anfangen, der noch zwei Sekunden wieder verschwindet? Er wird wohl weder den Text lesen können, noch wird er auf den Dialog reagieren können. Wozu also?

sirius 30. Jul 2007 14:51

Re: Message gelöcht ohne timer
 
@Lucky:
Zitat:

Zitat von Der Typ, der die Frage gestellt hat
Die 2 sekunden hab einfach mal so geschrieben


hoika 30. Jul 2007 14:52

Re: Message gelöcht ohne timer
 
Hallo,

wenn es sich um einen unbedeutenden Hinweis handelt,
macht es schon manchmal Sinn.
Sieht man doch bei bestimmten Programmen auch,
die zeigen allerdings dann noch die verbleibenden Sekunden an
(nein, ich meine jetzt nicht das "Datei-Kopieren").

"Achtung, dieses Fenster zerstört sich in 5 Sekunden selbst"
*Klirr*
"Glaser anrufen ? ja, nein, vielleicht"

;)


Heiko

dajuhsa 30. Jul 2007 14:55

Re: Message gelöcht ohne timer
 
Zitat:

Was macht denn das für einen Sinn? Was soll ein Benutzer mit einem Dialog anfangen, der noch zwei Sekunden wieder verschwindet? Er wird wohl weder den Text lesen können, noch wird er auf den Dialog reagieren können. Wozu also?
wenn man was drucken will, kommt ein dialog: "soundso wird gedruckt" und unten drunter 1 button "Cancel". das ding erscheint und verschwindet nach 0,3 sekunden

SaFu 30. Jul 2007 14:57

Re: Message gelöcht ohne timer
 
Es soll einfach nur eine message kommen die datei wurde gelöscht und soll dan wieder verschwinden ohne das man mit ok bestätigen muss

hoika 30. Jul 2007 15:02

Re: Message gelöcht ohne timer
 
Hallo,

naja dazu würde ich kein MessageDlg benutzen,
es soll ja eine Info angezeigt und trotzdem was gemacht werden,
quasi SemiModal.

Siehe mein Posting hier

http://www.delphipraxis.net/internal...ight=showmodal


Heiko

Luckie 30. Jul 2007 15:13

Re: Message gelöcht ohne timer
 
Zitat:

Zitat von hoika
wenn es sich um einen unbedeutenden Hinweis handelt,
macht es schon manchmal Sinn.

Wenn die Meldung keinerlei Bedeutung für den Benutzer hat, warum dann anzeigen?

Zitat:

Sieht man doch bei bestimmten Programmen auch,
Und ergibt dort genauso wenig Sinn.


Zitat:

Zitat von dajuhsa
wenn man was drucken will, kommt ein dialog: "soundso wird gedruckt" und unten drunter 1 button "Cancel". das ding erscheint und verschwindet nach 0,3 sekunden

Richtig, weil es dann zu spät ist den Druckauftrag abzubrechen und so lange es nicht zu spät ist, wird er eben angezeigt, mit der Möglichkeit für den Benutzer den Druckauftrag abzubrechen.

Zitat:

Zitat von fuknersascha
Es soll einfach nur eine message kommen die datei wurde gelöscht und soll dan wieder verschwinden ohne das man mit ok bestätigen muss

Und was machst du, wenn der Benutzer gerade mit einem anderen Programm arbeitet, während die Meldung kommt oder gar nicht am PC sitzt? Das bedeutet doch, dass weder der Programmablauf noch die weitere Benutzung des Programmes von dieser Meldung abhängt. Warum also anzeigen? Desweiteren hat es sich eingebürgert eine (Fehler)meldung anzuzeigen, wenn etwas nicht funktioniert hat und nicht umgekehrt, wie du es hier machst.

dajuhsa 30. Jul 2007 15:19

Re: Message gelöcht ohne timer
 
bei der DB gibts ja auch keine durchsage "Achtung,Achtung! Der Zug nach Hinterkrautsheim hat keine 15 minuten verspätung" :wink:

SaFu 30. Jul 2007 19:52

Re: Message gelöcht ohne timer
 
:thumb:

ich sag ja das forum ist geil hier kannst auch noch lachen

aber ich gebe mich geschlagen da ich sowieso net der beste programmierer bin und es nur arbeit macht lass iches einfach sein :mrgreen: :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 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