Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Step wie noch mal ? (https://www.delphipraxis.net/132994-step-wie-noch-mal.html)

EWeiss 23. Apr 2009 14:13


Step wie noch mal ?
 
Hab irgendwann schon mal danach gefragt glaube ich.
Find den Thread nicht mehr.

Code:
for i = 0 to 100 step 10
Wie bekomme ich den Step in Delphi ?

gruss Emil

Namenloser 23. Apr 2009 14:14

Re: Step wie noch mal ?
 
Über eine Whileschleife oder Multiplikation. Eine direkte Möglichkeit gibt es soweit ich weiß nicht.

EWeiss 23. Apr 2009 14:19

Re: Step wie noch mal ?
 
Zitat:

Zitat von NamenLozer
Über eine Whileschleife oder Multiplikation. Eine direkte Möglichkeit gibt es soweit ich weiß nicht.

Wie soll ich das hier verwirklichen fällt mir nix ein .. :wall:

Delphi-Quellcode:
procedure TfrmDraw.FadeBackBuffer;
var
 dx : Integer;
 dy : Integer;
 r : Integer;
 g : Integer;
 b : Integer;
begin

    BitBlt(hTempDc, 0, 0, 65, 63, DC, 0, 0, SRCCOPY);
    //' Copy The R,G,B Data Into Our Image Array For Rapid Editing/Fading.
    CopyMemory(@ia[0,0], pAddr, 49152);
    //' Fade The Data.
    For dy := 0 To 62 do
    begin
        For dx := 0 To 195 do //(Step 3)
        begin
            b := ia[dx, dy] - 15;
            If b < 0 Then
                b := 0;

            ia[dx, dy] := b;

            g := ia[dx + 1, dy] - 15;
            If g < 0 Then
                g := 0;

            ia[dx + 1, dy] := g;

            r := ia[dx + 2, dy] - 15;
            If r < 0 Then
                r := 0;

            ia[dx + 2, dy] := r;
        end;
    end;
    //' Copy Edited Image Back To Dib Section.
    CopyMemory(pAddr, @ia[0,0], 49152);
    //' Blit The Faded Image To The Back Buffer.
    BitBlt(DC, 0, 0, 65, 63, hTempDc, 0, 0, SRCCOPY);


end;
gruss Emil

jfheins 23. Apr 2009 14:25

Re: Step wie noch mal ?
 
Statt
Code:
for i = 0 to 100 step 3 do
begin
  // ...
end;
entweder das hier:
Delphi-Quellcode:
i: Integer = 0;
while i <= 100 do
begin
  // ...
  i := i + 3;
end;
oder das hier:
Delphi-Quellcode:
for i := 0 to (100 div 3) do
begin
  // Mach was mit (i * 3)
end;
;)

EWeiss 23. Apr 2009 14:29

Re: Step wie noch mal ?
 
Danke!
werd es mal mit
Delphi-Quellcode:
For dx := 0 To (195 div 3) do
begin
  // Mach was mit (dx * 3)
end;
versuchen.

EDIT:
Obwohl ich dann eigentlich direkt 65 angeben kann
Er soll aber alle 65 pixel die schleife ablaufen.

Dein Beispiel ist das gleiche wie
Delphi-Quellcode:
For dx := 0 To 65 do
oder ?
Wann bearbeitet er aber 130 und 195 ?
also einmal von 0 > 65 dann von 65 > 130 usw..
Das wäre so aber nicht möglich mit DIV 3

gruss Emil

Sherlock 23. Apr 2009 14:50

Re: Step wie noch mal ?
 
wie wäre es mit
Delphi-Quellcode:
for i := 0 to 10 do
begin
  // mach was mit
  (i*10)
end;
Das mit dem div verstehe ich ehrlich gesagt nicht :lol:

Sherlock

EWeiss 23. Apr 2009 14:58

Re: Step wie noch mal ?
 
Zitat:

Zitat von Sherlock
wie wäre es mit
Delphi-Quellcode:
for i := 0 to 10 do
begin
  // mach was mit
  (i*10)
end;
Das mit dem div verstehe ich ehrlich gesagt nicht :lol:

Sherlock

habs ja geschrieben :)
For dx := 0 To 65 do

Das problem ist aber immer noch das gleiche.
Es nutzt mir nichts die daten i*3 zu nehmen denn zuerst sollen die ersten
65 pixel dann die von 65 > 130 und dann die von 130 > 195 verarbeitet werden
das geht aber mit i*3 nicht.

gruss Emil

jfheins 23. Apr 2009 15:02

Re: Step wie noch mal ?
 
@Sherlock: Das mit dem div ist das, was du "im Kopf" gemacht hast: Es rechnet die Anzahl der Durchläufe aus, die notwendig sind.

@Emil: Das verstehe ich jetzt nicht mehr :gruebel:

Ich dachte du meinst mit

Code:
for i := 0 to 10 step 3 do
showmessage(i);
Dass da sowas rauskommt:
Zitat:

0 3 6 9
Dann wäre das hier equivalent:
Delphi-Quellcode:
for i := 0 to (10 div 3) do
// oder ausgerechnet: for i := 0 to 3 do
showmessage(i * 3);
Das da oben wäre dann ungefähr so:
Delphi-Quellcode:
For dx := 0 To (195 div 3) do //(Step 3)
        begin
            b := ia[(dx * 3), dy] - 15;
            If b < 0 Then
                b := 0;

            ia[(dx * 3), dy] := b;

            g := ia[(dx * 3) + 1, dy] - 15;
            If g < 0 Then
                g := 0;

            ia[(dx * 3) + 1, dy] := g;

            r := ia[(dx * 3) + 2, dy] - 15;
            If r < 0 Then
                r := 0;

            ia[(dx * 3) + 2, dy] := r;
        end;
Die Variable dx durchläuft den Bereich von 0 bis 65 - da du aber beid jeder Verwendung (dx * 3) nimmt, bekommst du den Bereich 0..195 in Dreierschritten (lies: 0, 3, 6, 9, 12, 15, ..., 195)

gammatester 23. Apr 2009 15:09

Re: Step wie noch mal ?
 
Ich schlage trotzdem vor, eine While-Schleife zu nehmen, sonst muß man ev. ziemlich viel rechnen: for i=12 to 51 step 7 wird dann einfach zu:
Delphi-Quellcode:
i := 12;
while i<=51 do begin
  //...
  inc(i,7);
end;
Mit einer For-Schleife wird es viel komplizierter.

EWeiss 23. Apr 2009 15:13

Re: Step wie noch mal ?
 
Zitat:

@Emil: Das verstehe ich jetzt nicht mehr
Sorry ist korrekt in 3 schritten also 3,6,9 usw..
Danke ;)

gruss Emil


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:11 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf