Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: So 25.04.10 21:04 
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...
Einloggen, um Attachments anzusehen!
_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
gfehmke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 24



BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 25.04.10 22:02 
Etwas abgewandelt: Alle karten, die sichtbar sind, werden entsprechend angeordnet
ausblenden 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;

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: 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
ausblenden 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!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!