Autor Beitrag
wo0zy
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 08.05.03 13:50 
hallo, ich habe eine prozedur, die auf ein onclickereignis reagiert.
ausblenden volle Höhe 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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Do 08.05.03 21:53 
ich kann dir sogar zwei ratschläge geben!

dein original code:
ausblenden volle Höhe 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:
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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Do 08.05.03 23:32 
mach mal das in geschweiften klammern weg

ausblenden 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:

ausblenden 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 :eyecrazy:

viel spaß beim :autsch:


ase

_________________
-EN
wo0zy Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 09.05.03 07:57 
an dem fehlenden sleep liegt es auch nicht, habs auch schon probiert.... :cry:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ausblenden volle Höhe 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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: Fr 09.05.03 09:16 
ich glaub dir ja. setz mal das vors sleep:

ausblenden Quelltext
1:
  Application.ProcessMessages;					



ase

_________________
-EN
wo0zy Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 09.05.03 09:32 
:shock: die *mist*e geht! :shock: :P hammer danke danke danke!

wozu dient denn dieser befehl??

_________________
It's not a bug, it's a feature!
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 203

Gentoo, Windows 9X, ME, 2k, NT, XP
Delphi 7 Prof., PHP 5 (Eclipse 3 SDK)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 09.05.03 09:54 
hehe werd ich machen danke

_________________
It's not a bug, it's a feature!