hi zusammen.
folgendes:
habe ein schachspielbrett - das panel "SpielfeldPanel" ist der container, drin ist ein gr. image als spielbrett und darauf diverse kleine images fuer die figuren (durchnumeriert: imgFeldXY).
nach jedem zug wird intern in einem array der zug berechnet (figuren gesetzt) und danach soll analog zu diesem array das grafische spielbrett neu gezeichnet werden - alle figuren. problem: nach jedem zug flimmert es da einmal fleissig, weil fuer jedes spielfeld (64 stueck) ein image geladen wird. unschoen.
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: 41: 42: 43: 44:
| for i := 1 to 64 do begin case AktuelleStellung[i] of 0: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\0 - Leer_T.bmp'; 1: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\BauerWeiss_T.bmp'; -1: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\BauerSchwarz_T.bmp'; 2: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\SpringerWeiss_T.bmp'; -2: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\SpringerSchwarz_T.bmp'; 3: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\LaeuferWeiss_T.bmp'; -3: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\LaeuferSchwarz_T.bmp'; 4: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\TurmWeiss_T.bmp'; -4: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\TurmSchwarz_T.bmp'; 5: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\DameWeiss_T.bmp'; -5: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\DameSchwarz_T.bmp'; 6: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\KoenigWeiss_T.bmp'; -6: FigurenString_Pfad := ExtractFilePath(Application.ExeName) + 'Grafik\Spiel-Figuren\Transparent\KoenigSchwarz_T.bmp'; end; for j := 0 to SpielfeldPanel.ControlCount - 1 do if (SpielfeldPanel.Controls[j] is TImage) then if TImage(SpielfeldPanel.Controls[j]).Name = 'imgFeld' + IntToStr(i) then TImage(SpielfeldPanel.Controls[j]).Picture.LoadFromFile(FigurenString_Pfad);
end; |
wie gesagt, das funktioniert. doch um das flimmern zu minimieren dachte ich mir, es waere vorteilhaft, nicht mehr alle 64 images neu zu zeichnen, sondern nur doch diejenigen, die im vgl. zum vorigen zug veraendert wurden (zumeist nur eine figur).
1) wie sollte ich das machen? meine loesungsidee: pfad des geladenen bildes der jeweiligen imagekomponente auslesen und wenn dieser gleich dem neuen entspricht (= auf diesem spielfeld wurde keine figur bewegt), soll nichts neu geladen werden. was ist von dieser idee zu halten?
2) umsetzung: wie bekomme ich diesen pfad? etwa folgendermassen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| for j := 0 to SpielfeldPanel.ControlCount - 1 do if (SpielfeldPanel.Controls[j] is TImage) then if (TImage(SpielfeldPanel.Controls[j]).Name = 'imgFeld' + IntToStr(i)) and (TImage(SpielfeldPanel.Controls[j]).Picture.GetNamePath <> FigurenString_Pfad) then TImage(SpielfeldPanel.Controls[j]).Picture.LoadFromFile(FigurenString_Pfad); |
sofern mit GetNamePath die von mir gewuenschte funktion ueberhaupt moeglich ist, stellt sich die frage, warum es dann trotzdem immer noch flimmert...
danke + ciao,
mijozi.