Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Problem mit 'Struktur-Prozedur' (https://www.delphipraxis.net/12254-problem-mit-struktur-prozedur.html)

julianjetter 23. Nov 2003 22:14


Problem mit 'Struktur-Prozedur'
 
Hallo!
Ich habe ein kleines Problem beim Benutzen der folgenden Prozedur.
Sie soll theoretisch das Formular strukturieren. Das klappt auch ganz gut, nur wird es in horionzontaler Richtung bis zur Formularmitte ausgeführt, ab dann gibt es nur Streifen nach rechts. Am besten selbst mal ausprobieren ;-)
Form1.Width in Form1.Width*2 zu Ändern liefert zwar das korrekte Resultat, aber das muss sich doch auch anders beheben lassen... :gruebel:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var color: array[0..2] of dword;
    row,col: integer;
begin
  color[0] := $00CCCCCC;
  color[1] := $00999999;
  color[2] := $00666666;
  Randomize;
  Canvas.MoveTo(0,0);
  for col:=0 to Form1.Height do begin
    for row:=0 to Form1.Width do begin
      Canvas.Pen.Color := color[random(2)];
      Canvas.LineTo(row,col);
    end;
  end;
end;
MfG Julian Jetter

Christian Seehase 23. Nov 2003 22:37

Re: Problem mit 'Struktur-Prozedur'
 
Moin Julian,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Erklären kann ich mir den Effekt im Moment nicht.
Es muss übrigens Random(3) heissen, damit alle drei Tabelleneinträge benutzt werden.

scp 23. Nov 2003 22:40

Re: Problem mit 'Struktur-Prozedur'
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var color: array[0..2] of dword;
    row,col: integer;
begin
  color[0] := $00CCCCCC;
  color[1] := $00999999;
  color[2] := $00666666;
  Randomize;
  Canvas.MoveTo(0,0);
  col:=0;
  for col:=0 to Form1.Height do begin
    for row:=0 to Form1.Width do begin
      {Canvas.Pen.Color := color[random(2)];
      Canvas.LineTo(row,col);}
      Canvas.Pixels[row,col] := color[random(3)];
    end;
  end;
end;

himitsu 24. Nov 2003 00:38

Re: Problem mit 'Struktur-Prozedur'
 
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif.

Es ist schon klar, dass das halbe Bild mit Linien überseht ist.
Du zeichnest doch mit Linien (LineTo). Da beim Sprung zur nächsten Zeile ja von einem Ende des Bildes (Canvas rechts) zum anderen Ende (Canvas links) eine Linie über das Bild gezeichnet wird, welche ja eine Zeile runterspringt, also zur Hälfte auf der 1. Zeile und zur anderen Hälfte auf der 2. Zeile verläuft.

http://www.FrankNStein.de/FehlerbeimZeichnen.jpeg
(1. Zeile zeichnen / Sprung zur nächsten Zeile / 2. Zeile zeichnen)

Demnach hat scp schon eine gute Lösung gegeben. Allerdings ist das noch zuviel:
Delphi-Quellcode:
  Canvas.MoveTo(0,0);
  col:=0;
Der Form halber sollte Color auch noch als TColor deklariert werden.

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
  Var Color: Array[0..2] of TColor;
    Row, Col: Integer;

  Begin
    Color[0] := $00CCCCCC;
    Color[1] := $00999999;
    Color[2] := $00666666;
    Randomize;
    For Col := 0 to Form1.Height - 1 do
      For Row := 0 to Form1.Width - 1 do
        Canvas.Pixels[Row, Col] := Color[Random(3)];
  End;
Und dann noch Color als Konstante:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
  Const Color: Array[0..2] of TColor = ($00CCCCCC, $00999999, $00666666);

  Var Row, Col: Integer;

  Begin
    Randomize;
    For Col := 0 to Form1.Height - 1 do
      For Row := 0 to Form1.Width - 1 do
        Canvas.Pixels[Row, Col] := Color[Random(3)];
  End;
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

julianjetter 24. Nov 2003 05:38

Re: Problem mit 'Struktur-Prozedur'
 
Nun funktioniert's. Vielen Dank! :-)
TColor als Konstante geht aber nicht => Die Farben sollten später aus einer Datei kommen.

MfG Julian Jetter

BTW: Aufgrund der Bilder von Hitmitsu leuchtet mir der Fehler auch ein, der das eigentliche Problem war! :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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