![]() |
[Logik] Bild durch for Schleife auf Formular verteilen
Hi, ich hab mal wieder eine Logikfrage....
Ich komm einfach nicht auf die Lösung des Problems, also nun zu dem was ich will. Ich möchte mit einem Bild ein Formular bedecken. Ich weiß nicht wie groß das Formular ist und ich will rechts und links am Rand immer 1 px frei haben, aber zwischen den Bildern keinen Abstand. Ich versuche es nun mit For:
Delphi-Quellcode:
So, ich habe leider keinhe Ahnung, was ich mit X und Y anstellen muss, damit die Bilder korrekt auf das Formular aufgeteilt werden.
procedure TForm1.FormCreate(Sender: TObject);
var I: Integer; begin // ...weiterer Code... SetLength(Terrain, ( (ClientWidth - 2 - ClientWidth mod 64) div 64) * ( (ClientHeight - 2 - ClientHeight mod 48) div 48)); // Es sollen so viele Bilder erzeugt werden wie nötig, um das Formular zu bedecken UND jeweils 1 px links und rechts freizulassen for I := 0 to Length(Terrain) - 1 do begin with Terrain[I] do begin X := 1 + 64 * (I mod 64); // ein Bild ist 64 px breit Y := 1 + 48 * (I mod 48); // und 48 px hoch // oben ist der Versuch, die Bilder nun so aufzuteilen, dass das Formular bedeckt ist, klappt leider nicht ( Die Bilder sind in zwei diagonalen Reihen vorhanden ... ) // Der Rest ist unwichtig für mein Problem end; end; // ...und noch mehr Code... end; Kann mir da jemand helfen? Ich danke vielmals im Vorhinein allen, die versuchen mir zu helfen. mfG VdG |
Re: [Logik] Bild durch for Schleife auf Formular verteilen
Wenn du das ganze Feld zeichnen willst, dann mußt du in ZWEI verschachtelten Schleifen X UND Y durchgehn.
Du gehts nur X und Y gleichzeitig über I durch, was natürlich eine Diagonale ergibt. hab mich verguckt :oops:
Code:
also
X := 1 + 64 * (I mod [b]16[/b]);
Y := 1 + 48 * (I div [b]16[/b]); // ^^ die Anzahl der Spalten ... hier wirst du wohl eine // Variable reinnehmen müssen, wenn die Größe veränderbar ist
Code:
macht dann
X := 1 + 64 * (I mod ((ClientHeight - 2) div 48));
Y := 1 + 48 * (I div ((ClientHeight - 2) div 48));
Delphi-Quellcode:
PS: warum hast du dein SetLength so umständlich berechnet?
procedure TForm1.FormCreate(Sender: TObject);
var I, Z: Integer; begin // ...weiterer Code... Z := (ClientWidth - 2) div 64; SetLength(Terrain, Z * ((ClientHeight - 2) div 48)); for I := 0 to High(Terrain) do begin with Terrain[I] do begin X := 1 + 64 * (I mod Z); Y := 1 + 48 * (I div Z); // ... end; end; // ...und noch mehr Code... end; DIV rundet doch eh ab :zwinker: |
Re: [Logik] Bild durch for Schleife auf Formular verteilen
... und für den Index von Terrain[] halt noch einen Zähler mitlaufen lassen
edit: oder halt ein 2d-Array für die Bilder verwenden. Vereinfacht dann den Zugriff. |
Re: [Logik] Bild durch for Schleife auf Formular verteilen
Vielen Dank euch beiden, da bin ich wohl wahnsinnig auf dem Schlauch gestanden. :wall: :mrgreen:
Jetzt hab ichs mit einem 2D Array gemacht und es klappt wunderbar. Nochmals Danke euch beiden mfG und :dp: VdG / Flo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz