| Autor |
Beitrag |
wo0zy
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 08.05.03 13:50
hallo, ich habe eine prozedur, die auf ein onclickereignis reagiert. 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:
| procedure TForm1.OnImgClick(Sender: TObject); begin If Sender is TIDImage then Inc(count); if count=1 then begin Sender1:=Sender; (Sender1 as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\'+(Sender1 as TIDImage).ID+'.ico'); (Sender1 as TIDImage).Enabled:=false; end; if count=2 then begin if Sender<>Sender1 then begin pfad:=ExtractFilepath(ParamStr(0))+'Icons\'+(Sender1 as TIDImage).ID+'.ico'; Label1.Caption:=pfad; (Sender as TIDImage).Picture.LoadFromFile(pfad); (Sender as TIDImage).Enabled:=false; count:=0; versuche:=versuche+1; if (Sender1 as TIDImage).ID=(Sender as TIDImage).ID then begin (Sender as TIDImage).hide; (Sender1 as TIDImage).hide; Punkte:=Punkte+1; StatusBar1.Panels[0].Text:='Punkte: '+IntToStr(punkte); end else begin (Sender1 as TIDImage).Enabled:=true; (Sender1 as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\Hintergrund2.bmp'); (Sender as TIDImage).Enabled:=true; (Sender as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\Hintergrund2.bmp'); end; StatusBar1.Panels[1].Text:='Versuche: '+IntToStr(versuche); end; end; end; | diese prozedur setzt count auf 1 wenn auf das erste bild geclickt wird und auf 2 wenn auf das 2. geclickt wird. das funktioniert auch alles, nur wird nach dem 2. click das image nicht geladen, der erst der dahinter steht geht aber problemlos#
habt ihr da irgendeinen rat für mich?
_________________ It's not a bug, it's a feature!
|
|
ase
      
Beiträge: 203
Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
|
Verfasst: Do 08.05.03 21:53
ich kann dir sogar zwei ratschläge geben!
dein original code:
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: 34: 35: 36: 37: 38: 39: 40:
| procedure TForm1.OnImgClick(Sender: TObject); begin If Sender is TIDImage then Inc(count);
if count = 1 then begin Sender1:=Sender; (Sender1 as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\'+(Sender1 as TIDImage).ID+'.ico'); (Sender1 as TIDImage).Enabled:=false; end;
if count = 2 then begin if Sender<>Sender1 then begin pfad:=ExtractFilepath(ParamStr(0))+'Icons\'+(Sender1 as TIDImage).ID+'.ico'; Label1.Caption:=pfad; (Sender as TIDImage).Picture.LoadFromFile(pfad); (Sender as TIDImage).Enabled:=false; count:=0; versuche:=versuche+1; if (Sender1 as TIDImage).ID=(Sender as TIDImage).ID then begin (Sender as TIDImage).hide; (Sender1 as TIDImage).hide; Punkte:=Punkte+1; StatusBar1.Panels[0].Text:='Punkte: '+IntToStr(punkte); end else begin (Sender1 as TIDImage).Enabled:=true; (Sender1 as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\Hintergrund2.bmp'); (Sender as TIDImage).Enabled:=true; (Sender as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\Hintergrund2.bmp'); end; StatusBar1.Panels[1].Text:='Versuche: '+IntToStr(versuche); end; end; end; |
1.: formatiere deinen code junge! dann siehst du durch!!
2.: das If Sender <> Sender1 then kannst du weglassen denke ich. an dieser stelle wird sender immer gleich sender1 sein wenn diese TIDImage komponente das OnClick ereignis nicht auslöst wenn sie Enabled = False hat.
ich vermute mal das is son memory spiel. es währe interessant zu wissen, wie die variable count nach programmstart aussieht. und wann welches bild nicht geladen wird.
ase
_________________ -EN
|
|
wo0zy 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 08.05.03 23:17
hi, also der code is eigentlich auch formatiert, so das ich da durchsehe, das mit dem sender<>Sender1 war nur um zu testen ob das denn auch der fall ist. count wird beim start auf null gesetzt.
und richtig es ist ein memory, aber wenn das 2. bild nicht geladen wird, dann is das natürlich *mist*e.
das bild von sender1 is das erste bild was aufgedekt wird, sender is das zweite und das wird nicht geladen. der rest geht aber und es kommt auch beim debugen keine fehlermeldung oder sowas, also ich find das echt unerklärlich... 
_________________ It's not a bug, it's a feature!
|
|
ase
      
Beiträge: 203
Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
|
Verfasst: Do 08.05.03 23:32
mach mal das in geschweiften klammern weg
Quelltext 1: 2: 3: 4: 5:
| begin if Sender<>Sender1 then begin pfad:=ExtractFilepath(ParamStr(0))+'Icons\'+(Sender{1} as TIDImage).ID+'.ico'; // hier Label1.Caption:=pfad; |
UND noch was... ich denke ich habs gelöst!! hihi...
wenn du zwei verschiedene aufdeckst, dann werden die doch sofort wieder zugedeckt. der malt zwar kurz beide verschiedenen bilder, geht aber sofort weiter und bedeckt beide gleich wieder mit diesem Hintergrund2.bmp. mach mal folgendes:
Quelltext 1: 2: 3: 4: 5:
| versuche:=versuche+1;
Sleep(2000);
if (Sender1 as TIDImage).ID=(Sender as TIDImage).ID then |
das kannst du später noch anders lösen. erstmal zum schaun obs daran liegt. schätz dein compi issn bissl zu schnell für deine augen
viel spaß beim
ase
_________________ -EN
|
|
wo0zy 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 09.05.03 07:57
an dem fehlenden sleep liegt es auch nicht, habs auch schon probiert....
und das andere mit dem pfad hab ich im moment auch schon so gelöst (Sender as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\Hintergrund2.bmp');
_________________ It's not a bug, it's a feature!
|
|
ase
      
Beiträge: 203
Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
|
Verfasst: Fr 09.05.03 08:46
doch, des muss des sleep sein. schau mal, wenn der benutzer das 2. bild anklickt deckst du laut code das bild auf. das funzt auch aber wenn du im code weiter gehst dann kommt sofort die Abfrage ob es das gleiche bild war oder nicht. und wenn nicht, dann wird sofort wieder das hintergrundbild geladen. des erweckt dann den eindruck beim benutzer das ganix passiert ist. allerdings müsste er dann beim anderen bild auch wieder den hintergrund laden. passiert des?
wenn nich, dann poste doch mal das ganze programm (mod?). oder schick mir per mail. vielleicht gibts ja doch noch ne andere ursache die garnicht in dieser routine liegt.
ase
_________________ -EN
|
|
wo0zy 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 09.05.03 09:08
hier, das is die funktion mit sleep und die geht nicht, glaub mir er wartet zwar aber das bild wird nicht angezeigt 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:
| procedure TForm1.OnImgClick(Sender: TObject); begin If Sender is TIDImage then Inc(count); if count=1 then begin Sender1:=Sender; (Sender1 as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\'+(Sender1 as TIDImage).ID+'.ico'); (Sender1 as TIDImage).Enabled:=false; end; if count=2 then begin pfad:=ExtractFilepath(ParamStr(0))+'Icons\'+(Sender1 as TIDImage).ID+'.ico'; Label1.Caption:=pfad; (Sender as TIDImage).Picture.LoadFromFile(pfad); (Sender as TIDImage).Enabled:=false; count:=0; versuche:=versuche+1; sleep(2000); if (Sender1 as TIDImage).ID=(Sender as TIDImage).ID then begin (Sender as TIDImage).hide; (Sender1 as TIDImage).hide; Punkte:=Punkte+1; StatusBar1.Panels[0].Text:='Punkte: '+IntToStr(punkte); end else begin (Sender1 as TIDImage).Enabled:=true; (Sender1 as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\Hintergrund2.bmp'); (Sender as TIDImage).Enabled:=true; (Sender as TIDImage).Picture.LoadFromFile(ExtractFilepath(ParamStr(0))+'Icons\Hintergrund2.bmp'); end; StatusBar1.Panels[1].Text:='Versuche: '+IntToStr(versuche); end; end; |
_________________ It's not a bug, it's a feature!
|
|
ase
      
Beiträge: 203
Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
|
Verfasst: Fr 09.05.03 09:16
ich glaub dir ja. setz mal das vors sleep:
Quelltext 1:
| Application.ProcessMessages; |
ase
_________________ -EN
|
|
wo0zy 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 09.05.03 09:32
 die *mist*e geht!  hammer danke danke danke!
wozu dient denn dieser befehl??
_________________ It's not a bug, it's a feature!
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Fr 09.05.03 09:40
Die Bilder werden zwar hineingemalt, aber das Bild wird nicht gleich aktualisiert.. der Befehl Application.ProcessMessages arbeitet die Message-Queue des Projekts ab. Alternativ kannst du auch auch einfach die spezifischen Images manuell per Refresh aktualisieren...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
ase
      
Beiträge: 203
Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
|
Verfasst: Fr 09.05.03 09:45
MAN war das ne schwere geburt! junge junge...
völlig richtig was motzi da sagt. daran lags nähmlich. ich hätts dir auch noch genauer erklärt aber ich wollte erstmal wissen obs daran liegt.
viel spaß und spiel schön!
ase
_________________ -EN
|
|
wo0zy 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 09.05.03 09:54
hehe werd ich machen danke
_________________ It's not a bug, it's a feature!
|
|