Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - "showmessage" ohne Bestätigung?


D. Annies - Di 28.12.10 21:17
Titel: "showmessage" ohne Bestätigung?
Hi, Delpher,
gibt es die Möglichkeit, eine Message (kurz) angezeigt zu bekommen, aber das Programm läuft trotzdem weiter?
Gruß, Detlef


Delete - Di 28.12.10 21:19

soll sich der Dialog von alleine schließen oder wie?


platzwart - Di 28.12.10 21:21

Das macht dann doch gar keinen Sinn :roll: Du kannst aber auch eine Statusleiste verwenden und da reinschreiben...


D. Annies - Di 28.12.10 21:29

Ja, Luckie,
der Dialog soll sich von allein schließen - exakt!
(Wie) Geht das?
Gruß, Detlef


Delete - Di 28.12.10 21:34

Das ergibt keinen Sinn. Wenn ich nicht am Rechner bin, sehe ich die Nachricht nicht, dann braucht sie auch nicht erscheinen. Bin ich am Rechner, kann ich die mir die Nachricht in Ruhe durchlesen und sie dann selber schließen. Ergo soll sich die Nachricht selber schließen, dann kann sie nicht wichtig sein. Warum also dieser Krampf? Eine Meldung in der Statusleiste oder dem Fenstertitel wäre da bestimmt sinnvoller.

Aber wenn du unbedingt eine sich selbst schließende Dialogbox willst: http://www.michael-puff.de/Artikel/MessageBoxTimeout.shtml


D. Annies - Di 28.12.10 21:37

Hallo, Michael,
ich komme auf diese Idee, weil ich bei einem Auto-Portal genau das gesehen habe, in der Form: Ihr Auto wurde auf die Merkliste gesetzt ... (und automatisch weiter)
So, mal sehen, wie du gedacht hast, vielen Dank schon mal,
Detlef


platzwart - Di 28.12.10 21:44

Genau solche Nachrichten nerven mich als User extrem. Die Dinger bremsen mich nur aus und ich hab keinen Einfluss auf die Anzeige, absoluter Mist sowas. Dann setz doch lieber eine Nachricht in die Statusleiste...


D. Annies - Di 28.12.10 21:48

By the way, welche Unit ist messageboxTimeOut?
Danke, Detlef


Delete - Di 28.12.10 21:52

Steht alles auf der Seite. Lesen hilft.


D. Annies - Di 28.12.10 21:59

Danke, Micheal, <- siehe dein Abspann ..
hab ich gut gelesen, oder?
Na, ich kämpfe denn mal ..
Gruß, Detlef


Tilman - Di 28.12.10 22:23

Ich würde einfach ein unsichtbares Panel auf das Formular setzen, und das dann visible=true stellen und per Timer wieder ausblenden. Das Panel kannst du dann wie eine Messagebox verwenden im Prinzip.


D. Annies - Mi 29.12.10 09:22

Bin jetzt zwei Tage weg, melde mich aber wieder - erstmal vielen Dank,
Detlef


D. Annies - Fr 31.12.10 12:42

So, bin wieder da.
Mein Versuch mit dem Panel sieht so aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TBuchMain.PanelBlitz(sender: Tobject);
begin
  Timer1.Interval := 2000;
    //
  Panel1.caption := 'Datensatz wurde zu Unicode geändert';
  Panel1.Visible := true;
    //
end;


Ich weiß (noch) nicht, wie ich den Timer starte, bzw. stoppe?
Wahrscheinlich gaaanz leicht ;)

Vielen Dank für eine Idee!
Detlef


platzwart - Fr 31.12.10 12:55


Delphi-Quelltext
1:
2:
Timer1.Enabled:= True;
Timer1.Enabled:= False;


D. Annies - Fr 31.12.10 15:33

Danke, Platzi,
aber das isses noch nicht ganz. Ich habe jetzt den folgenden Code, bzw. Zusammenhang:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
procedure TBuchMain.PanelBlitz(sender: Tobject);
begin
  Timer1.Interval := 2000;
  timer1.Enabled := true;
    Panel1.caption := 'Datensatz wurde zu Unicode geändert';
    Panel1.Visible := true;
  timer1.Enabled := false;
  Panel1.Visible := false;
end;

procedure TBuchMain.UNICODEeinarbeiten1Click(Sender: TObject);
var n, k, z : integer;
begin                        //PopUp3 = in tntKlassenListe eintragen
  //showmessage('Es wird geändert bei Spaltenreihenfolge [Nr], Name, Vorname');
  z := 0;
  for n := 1 to tntstringgrid2.RowCount-1 do
  for k := 1 to tntstringgrid1.RowCount-1 do
  begin
    if (tntstringgrid1.cells[1,k] = tntstringgrid2.cells[3,n]) and  //Name
       (tntstringgrid1.cells[2,k] = tntstringgrid2.cells[4,n]) then //Vorname
    begin
      tntstringgrid1.cells[1,k] := tntstringgrid2.cells[0,n];
      tntstringgrid1.cells[2,k] := tntstringgrid2.cells[1,n];
      inc(z);
    end;
  end;
  if z > 0 then
  begin
    PanelBlitz(self);
    //if z = 1 then showmessage(inttostr(z) + ' Datensatz geändert')
    //else showmessage(inttostr(z) + ' Datensätze geändert');
  end
end;


Wer kann da weiterhelfen?
GGruß, Detlef


Tilman - Fr 31.12.10 17:09

Entschuldigung, das mit dem Timer war glaub ich ein blöder Vorschlag von mir, der war bei mir Sinnvoll als ich zuletzt sowas gemacht habe, aber bei dir solltest du wohl lieber den Befehl sleep(millisekunden) verwenden. Also z.B. Sleep(2000); .


bummi - Fr 31.12.10 17:51

der Teil:

Delphi-Quelltext
1:
2:
3:
4:
5:
//   Panel1.caption := 'Datensatz wurde zu Unicode geändert';
//   Panel1.Visible := true;
// wie Martok richtig feststellte das auskommentierte nicht 
 timer1.Enabled := false;
  Panel1.Visible := false;


Gehört in das Ereignis OnTimer des Timers


Martok - Fr 31.12.10 18:05

Nein, nicht ganz ;)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TBuchMain.PanelBlitz(sender: Tobject);
begin
  Timer1.Interval := 2000;
  timer1.Enabled := true;
    Panel1.caption := 'Datensatz wurde zu Unicode geändert';
    Panel1.Visible := true;
end;

OnTimer:
  timer1.Enabled := false;
  Panel1.Visible := false;


bummi - Fr 31.12.10 18:09

Mist, freilich Martok....

"Könntest Du bitte Delphitags verwenden" ;-) ;-)


Martok - Fr 31.12.10 18:11

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
"Könntest Du bitte Delphitags verwenden" ;-) ;-)

Eins war ja da - ich hab nur leider ein Quote geschlossen ;)
Das passiert wenn man den Tab gleich schließt, ohne mal zu prüfen was gepostet hat... :roll:


D. Annies - Sa 01.01.11 09:42

Hi, Tilman, Bummi und Martok!
Das geht super mit dem Timer, allerdings ein Timer2, da ich schon einen timer1 einsetze und sonst dessen Einstellungen überschreibe.
Vielen Dank!
Detlef