Autor |
Beitrag |
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 21.05.03 17:49
Hallo,
ich habe folgende funktion, die aber nur funktioniert wenn ich den ShowMessage einsetzt andefals geht er nicht, warum?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function TSokubahn.ShowMyDialog(aCaption,aDialogText:String; aDialogTyp:Integer):Integer; var raus:Boolean; begin raus:=False; strCaption:=aCaption; strText:=aDialogText; DialogTyp:=aDialogTyp; DrawDialog:=True; JaNein:=-1;
repeat application.ProcessMessages; ShowMessage('TEST'); until JaNein > -1; result:=JaNein; end; |
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 21.05.03 18:00
jetzt geht es auch ohne ShowMessage, ich habe einfach application.HandleMessage genommen, aber warum geht es jetzt ? was ist der unterschied ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Mi 21.05.03 18:32
Titel: bekanntes Problem
Hey mimi, exakt das gleiche Phänomen hatte ich vor der Info-Abiturklausur auch gehabt. Beispeilsweise habe ich ein Fibonacci programmiert, ohne ShowMessage hat es funktioniert, MIT ShowMessage aber nicht. Mir scheint es liegt daran dass Delphi bei seinen Programmen eine gewisse Zeit benötigt um Aufgaben zu erfüllen. Wenn diese Zeit beispielsweise durch ShowMessages überschritten oder gar unterschritten werden dann kommt es zu Fehlern, die aber nicht im Quellcode selber liegen.
Ich gebe dir morgen früh mal ein paar Beispiele, die alle richtig sind und genau das berechnen was sie sollen, abhängig davon ob eine ShowMessage vorhanden ist oder nicht
Gruß,
Knuddelbaer
|
|
TheNeon
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: Mi 21.05.03 18:36
... tja ....... Gott sei dank kam Fibbonacci nicht dran
naja .... ich und Knuddelbaer haben aber auch festgestellt, dass es anstatt von Showmessage auch mit sleep(100) geht  ..... bau das mal ein und staune
Bye 
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Mi 21.05.03 20:12
komische geschiechten, ich hatte das schon ein paar mal erlebt das es MIT SCHOMESSAGE geht und ohne Schowmessage nicht.
was ist ein "Fibbonacci" ?
ich habe noch keine erklärung dafür gefunden, was macht schowMessage genau ?
ruft es das formula einfach mit ShowModel auf ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Do 22.05.03 09:15
Ich weiss es ehrlich gesagt nicht. Aber es muss dennoch Zeitbedingt sein da es ja wie weiter oben steht auch mit einem einfachen Sleep-Befehl von MINDESTENS 50 ms geht. Bei einem Wert kleiner 50 kommen die gleichen Fehler wie ohne ShowMessage.
Die Fibonacci-Zahlenfolge ist eine simple Addition der beiden Vorgängerzahlen zur Nachfolgerzahl bis zum n-ten Element.
Beispiel:
3 7 10 17 27 44 71 115 ...
oder
1 2 3 5 8 13 21 34 ...
Wir hatten schon vor spasseshalber mal Borland zu fragen was es wirklich mit der ShowMessage auf sich hat, zumal ein Einserkandidad bei uns (weiblich natürlich) am gleichen Tag bei einem anderen Prog genau das gleiche Problem mit einer ShowMessage hatte.
Leider finde ich die Projektdateien nicht mehr, ich werde sie wohl erst nochmal proggen müssen...
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Do 22.05.03 14:58
schade, aber das wunder mich immer wieder bei ShowMessage
auch in anderen projekten ist das der fall...
ich würde gerne mal wissen was ShowMessage genau macht,einfach ein form auf den bildschrim erstellt wohl nicht....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Sa 24.05.03 11:24
Mein Bruder hat noch ein weiteres ShowMessage-Problem:
Fügt mal bitte in einem neuen Projekt zuerst 3 Edits, ein Image und 2 UpDowns ein. Setzt die UpDown auf Edit2 und Edit3.
Danach fügt bei einem UpDown (ursprünglich bei UpDOwn 2 was auf Edit3 zeigt) folgenden Code ein:
Quelltext 1: 2: 3: 4: 5:
| try Image1.Picture.LoadFromFile (IntToStr(Updown2.Position) +'.bmp'); except ShowMessage (IntToStr(Updown1.Position)); end; |
Ihr könnte gerne im Verzeichnis ein paar Bilder die durchnummeriert sind einfügen (wäre vielleicht besser).
Und noch was:
Quelltext 1: 2: 3: 4: 5:
| try Image1.Picture.LoadFromFile (IntToStr(Updown2.Position) +'.bmp'); finally ShowMessage (IntToStr(Updown1.Position)); end; |
hat auch einen tollen Effekt, egal wo ihr dann hinklickt, es wird dann immer auf das Teil geklickt, auch Alt-F4 wird nicht funzen. Lediglich Rechtsklick und der Taskmanager helfen da.
Greetz,
Knuddelbaer 
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 24.05.03 15:07
hat er denn schonmal alternativen zum ShowMessage befel ausprobiert ?
z.b.MessageDlg ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Sa 24.05.03 15:25
Nein aber du kannst es ja gerne testen 
|
|
Dezipaitor
      
Beiträge: 220
|
Verfasst: Sa 24.05.03 15:33
hi
ich habe mich mal mit dem problem auseinandergesetzt:
folgendes müsste klappen (ohne FileExists):
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType); begin try Image1.Picture.LoadFromFile (IntToStr(Updown2.Position) +'.bmp'); except Updown2.Position := Updown2.Position-1; UpDown2Click(Sender,Button); end; end; |
|
|
Dezipaitor
      
Beiträge: 220
|
Verfasst: Sa 24.05.03 15:39
@mimi :
ich habe folgende Erklärung parat :
das liegt an der Art wie ProcessMessages und HandleMessage
die Nachrichtenschlange abarbeiten :
die hilfe zu ProcessMessages sagt :
Interrupts the execution of an application so that it can process the message queue.
die hilfe zu HandleMessage sagt:
Interrupts the execution of an application while Windows processes a message in the Windows message queue.
der unterschied liegt bei beiden in den unterstrichenen wörtern:
während ProcessMessages die gesamte WindowsNachrichtenschlange abarbeitet (also alle Fenster),
schaut HandleMessage nur nach den Nachrichten für seine Anwendung (TApplication).
Daher kann es passieren, dass bei ProcessMessages die Anwendung zuerst mal garkeine Rechenzeit bekommt, besonders wenn das empfangen der Nachrichten in TApplication durch eine Endlosschleife blockiert wird.
das ganze ist aber alles sehr undurchsichtig,wie windows nachrichten und rechenzeit verteilt.
deshalb gebe ich keine 100% garantie darauf.
[/u]
|
|
mimi 
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 24.05.03 15:46
und wie passt das nun zusammen ?
ich würde wirklich wissen was showMessage macht, kann mir das jemmand genau sagen ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Sa 24.05.03 16:35
@dezipaitor:
Es klappt genauso gut wenn man einfach die ShowMessage rausnimmt
Sobald diese ShowMessage-Zeile entfernt wurde funktioniert alles wunderbar.
In diesem Thread geht es uns um die wahre Bedeutung und Arbeitsweise der ShowMessage, die entweder Fehler behebt oder gar Fehler verursacht.
|
|
TheNeon
      
Beiträge: 408
Windows
VS2010 C#
|
Verfasst: So 25.05.03 01:24
Da_Knuddelbaer hat folgendes geschrieben: | @dezipaitor:
Es klappt genauso gut wenn man einfach die ShowMessage rausnimmt
Sobald diese ShowMessage-Zeile entfernt wurde funktioniert alles wunderbar.
In diesem Thread geht es uns um die wahre Bedeutung und Arbeitsweise der ShowMessage, die entweder Fehler behebt oder gar Fehler verursacht. |
..... da showmessage jedoch dasselbe bewirkt wie sleep(100) hat dezipaitor garnicht mal so unrecht mit der Asoziation. 
|
|