Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Saubere Programmierung? (https://www.delphipraxis.net/100670-saubere-programmierung.html)

Delphieinsteiger 2. Okt 2007 10:23


Saubere Programmierung?
 
Hallo,

ich wollte fragen, ob vieleicht jemand eine saubere Programmierung hierfür weiß:

Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
K:integer;

Begin
     case x of
     0..96:
Begin
     for K:=0 To 96 Do
     Test1[k]:=Test[k];

     97..192:
Begin
     for K:=97 To 192 Do
     Test1[k]:=Test[k];
usw. in 96- Schritten bis 8000

Ich möchte halt die Werte aus dem Test array in der sich die 8000 Werte befinden immer in 96 Werte aufteilen und dem Test1 array zuweisen.So wie es ist funktioniert auch alles wunderbar, aber ich möchte nicht einen so langen Quelltext haben nur damit ich anhand der mousemovefunktion Werte zuweise.Vieleicht hat jemand eine Idee wie man das eleganter lösen kann.

[edit=SirThornberry]code-Tags durch Delphi-Tags ersetzt - nächstes mal bitte selbst richtig setzen - Mfg, SirThornberry[/edit]

jbg 2. Okt 2007 10:27

Re: Saubere Programmierung?
 
Delphi beherrscht auch das Multiplizieren von Zahlen.
Delphi-Quellcode:
for K := X * 96 to Min(7999, X * 96 + 95) do
  Test1[K] := Test[K];
Du weist aber schon, dass 0..96 insgesamt 97 Werte sind?

Muetze1 2. Okt 2007 10:30

Re: Saubere Programmierung?
 
Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  K:integer;
Begin
  for k := 0 to 96 do
    Test1[k] := Test[x mod 97];
end;
oder kurz:

Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  K:integer;
Begin
  Test1[k] := Copy(Test, x mod 97, 97);
end;
Grundsätzlich war bei deinem geposteten Code kein Case notwendig, da du eh immer das gleiche gemacht hast. Da hättest du auch gleich eine Schleife nehmen können. Ich habe deine Aussage nun so interpretiert, dass Test1[] immer von 0..96 geht und Test[] die 8000 Werte enthält. Wenn das aber falsch ist und Test1[] und Test[] jeweils 8000 Werte enthalten und du immer nur die 97 Werte kopiert haben willst, dann so:

Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  K, lBase:integer;
Begin
  lBase := x div 97;

  for k := 0 to 96 do
    Test1[lBase + k] := Test[lBase + k];
end;

jbg 2. Okt 2007 10:34

Re: Saubere Programmierung?
 
Zitat:

Zitat von Muetze1
Test1[k] := Copy(Test, x mod 97, 97);

Über Test1[] und Test[] hat er uns keine Info gegeben. Das könnte vom String über ein Array bis zu einem Indexer (aka Array-Property) sein.

Zitat:

und du immer nur die 97 Werte kopiert haben willst
In seinem Text schreibt er von 96-er Schritten, programmiert aber 97 beim ersten und 95 beim zweiten.

Zitat:

Delphi-Quellcode:
  lBase := x div 97;

  for k := 0 to 96 do
    Test1[lBase + k] := Test[lBase + k];
end;

8000 ist nicht durch 96 (und 97) teilbar. Dadurch liest (bzw. schreibst) du hinter der Array/String-Grenze.

Delphieinsteiger 2. Okt 2007 10:48

Re: Saubere Programmierung?
 
Danke für die Tipps,
aber bleibt bei euren Lösungen nicht die mousemovefunktion ausser Betracht?Ich möchte halt wenn ich mit der maus in dem Pixelbereich von 0..95 komme auch die Werte von 0..95 aus dem Testarray dem Test1array zuweisen.Wenn ich in den Pixelbereich von 96..191 komme auch diese Werte zuweisen.Deswegen hatte ich die Caseanweisung.Oder vertue ich mich da jetzt?Bin leider noch nicht so erfahren.Die Werte hatten jetzt noch nicht gestimmt weil ich nur das prinzip verstehen wollte,es sind auch nicht 8000 sondern 7968 Werte.Halt immer 96 Werte sollen von dem einen in den anderen Array zugewiesen werden.

Muetze1 2. Okt 2007 11:18

Re: Saubere Programmierung?
 
Delphi-Quellcode:
lBase := x div 96;

  for k := 0 to 95 do
    Test1[k] := Test[lBase + k];
end;

Delphieinsteiger 2. Okt 2007 14:59

Re: Saubere Programmierung?
 
Danke muetze1,

Jetzt habe ich es verstanden, und es funktioniert auch.Vielen Dank.

Delphieinsteiger 2. Okt 2007 16:31

Re: Saubere Programmierung?
 
Zu früh gefreut,
er übernimmt immer nur die ersten 96 Werte,auch wenn ich mich mit der maus in den Bereich von 96..191 befinde.Dann sollten ja eigentlich auch die Werte aus dem Testarray von 96..191 übertragen werden.Aber er überträgt immer nur die Werte von 0..95 egal wo ich mit der maus bin :cry:

Muetze1 2. Okt 2007 16:40

Re: Saubere Programmierung?
 
Delphi-Quellcode:
lBase := 96 * (x div 96);

  for k := 0 to 95 do
    Test1[k] := Test[lBase + k];
end;

Delphieinsteiger 2. Okt 2007 17:18

Re: Saubere Programmierung?
 
Super :thumb:
jetzt funktioniert es wie es soll!

Vielen herzlichen Dank,jetzt sieht mein Programm viel besser aus.


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