Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Images (Spielkarten) anordnen


galagher - So 25.04.10 21:04
Titel: Images (Spielkarten) anordnen
Hallo!

Ich möchte Images, die Spielkarten darstellen, nebeneinander anordnen, und weiss nicht wie!

Angenommen, es sind 5 Karten, die 2. und 3. von links wurde bereits gespielt, bleiben die 1., 4. und 5. Ich möchte nun diese Karten direkt nebeneinander anordnen, es soll also die 4. soll den Left-Wert der 2. einnehmen und die 5. den Wert der 3. Hoffe, das ist verständlich!

Wie könnte nun ein Code aussehen, der genau das macht: Den Left-Wert von Images so setzen, dass Karten nach links gerückt werden, und zwar so weit, dass ihr Left-Wert Left+50 ihres linken Nachbarn ist (die Karten überlappen einander) und dabei den Platz fehlender Karten einnehmen?

Kurz gesagt, möchte ich die Images immer schön nebeneinander haben, wie in der Grafik, aber ich weiss nicht wie ich das machen soll...


gfehmke - So 25.04.10 21:24

Hi

Ich würde mit einem Array of TImage ( bild[x] ) arbeiten.
Images werden entfernt durch bild[x].Visible := False

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
n:=50;
for x=1 to 5
begin
     if bild[x].visible then
     begin
          n:=n + 50;
          bild[x].left:=n;
     end;
end;


Die noch sichtbaren Images werden mit dem Versatzu von 50 Pixeln ab Position 100 positioniert.

( Ungetestetes Codeschnipsel )

HTH
G.


Xion - So 25.04.10 22:02

Etwas abgewandelt: Alle karten, die sichtbar sind, werden entsprechend angeordnet

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
n:=0;
for x:=0 to High(Karten)do
begin
     if bild[x].visible then
     begin
          bild[x].left:=n*50;
          bild[x].BringToFront; //=> die letzte Karte ist ganz rechts und ganz "oben"
          n:=n + 1;
     end;
end;


galagher - Mo 26.04.10 17:26

user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Etwas abgewandelt: Alle karten, die sichtbar sind, werden entsprechend angeordnet

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
n:=0;
for x:=0 to High(Karten)do
begin
     if bild[x].visible then
     begin
          bild[x].left:=n*50;
          bild[x].BringToFront; //=> die letzte Karte ist ganz rechts und ganz "oben"
          n:=n + 1;
     end;
end;

Genau das! Darauf bin ich nicht gekommen! Habe den Code bloss ein wenig angepasst - Left ist niemals 0, sondern kann, abhängig von der Anzahl der Karten, zwei Werte haben, also musste ich nur noch den Left-Wert addieren und es passt!

Vielen Dank für eure Hilfe!