Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Logik] Bild durch for Schleife auf Formular verteilen (https://www.delphipraxis.net/145277-%5Blogik%5D-bild-durch-schleife-auf-formular-verteilen.html)

Vasco da Gama 28. Dez 2009 13:21


[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:
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;
So, ich habe leider keinhe Ahnung, was ich mit X und Y anstellen muss, damit die Bilder korrekt auf das Formular aufgeteilt werden.
Kann mir da jemand helfen?
Ich danke vielmals im Vorhinein allen, die versuchen mir zu helfen.

mfG
VdG

himitsu 28. Dez 2009 13:26

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:
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
also
Code:
X := 1 + 64 * (I mod ((ClientHeight - 2) div 48));
Y := 1 + 48 * (I div ((ClientHeight - 2) div 48));
macht dann
Delphi-Quellcode:
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;
PS: warum hast du dein SetLength so umständlich berechnet?
DIV rundet doch eh ab :zwinker:

dmdjt 28. Dez 2009 13:36

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.

Vasco da Gama 28. Dez 2009 16:10

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