| Autor | 
Beitrag | 
mimi 
        
 
Beiträge: 3458 
 
Ubuntu, Win XP 
Lazarus 
 | 
Verfasst: Mi 21.05.03 16: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 17: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 17: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 17: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 19: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 08: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 13: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 10: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 14: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 14:25 
 
Nein aber du kannst es ja gerne testen    
 
 | 
 | 
Dezipaitor 
        
 
Beiträge: 220 
 
 
 
 | 
Verfasst: Sa 24.05.03 14: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 14: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 14: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 15: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 00: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.     
 
 | 
 |