Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   For-Schleife mit Canvas umsetzten (https://www.delphipraxis.net/177651-schleife-mit-canvas-umsetzten.html)

Chris211183 19. Nov 2013 09:23

For-Schleife mit Canvas umsetzten
 
Hallo,

ich hänge hier immernoch an meiner Skala, er Zeichnet mir einzelne Striche am Rand, aber ich bekomme es nicht hin, dass er mir von alleine die Skalenstriche am Rand mit dem selben Abstand zeichnet und diese angleicht, wenn ich den Abstand ändere. Ich hoffe diesmal kann mir jemand folgen ?

Delphi-Quellcode:
procedure THixBarGraph.Paint;
var
   R               : TRect;                                                   // Bargraphrechteck vom Typ TRect
   i               : double;                                                  // aufgespannter Wertebereich (Abstand zwischen den Skalenstrichen)
   Anz_Striche     : Integer;                                        // Skalenstriche
   Value           : double;
   ValueMin        : double;
   ValueMax        : double;

begin
  inherited;
  if (Parent = NIL) or not visible
  then Exit;


   Canvas.Brush.Color := FColor;
   Canvas.FillRect(Rect(0, 0, Width, Height));              // Hintergrund des Objektes als Rechteck Zeichnen
   case FKind of

      sbHorizontal : begin                                               // horizontale Ausrichtung der Komponente
                        R := Rect(OffsetUpper,                       // Bargraphrechteckes
                                 (Height - Barwidth) div 2,
                                  Width - OffsetLower,
                                 (Height + Barwidth) div 2);
                                                                                // Skalen zeichnen
                        case FLabelingStyle of

                         lbsLines :     begin
                                             Canvas.Pen.Color := clBlack;
                                             for i := 0 to round(Anz_Striche+1)
                                             do Inc(Anz_Striche[i]);
                                             Canvas.MoveTo(round(OffsetUpper + i * LabelingGap), Height);
                                             Canvas.LineTo(round(OffsetUpper + i * LabelingGap), (Height +                         Barwidth) div 2);

                                                                           
{*HIER SOLL ER, ABHÄNGIG VON DEM ABSTAND ZWISCHEN DEN SKALENSTRICHEN, DIESE ZEICHNEN*}
            end;

TiGü 19. Nov 2013 09:38

AW: For-Schleife mit Canvas umsetzten
 
:shock:

Abgesehen davon, dass du es nicht schaffst, deinen Quellcode einfach mal zu zippen und als Anhang hochzuladen...nein, der Codeschnipsel ist furchtbar formatiert, es fehlen viele schließende
Delphi-Quellcode:
end;
und wenn du einfach mal auf F9 drücken würdest, müsste auch dein Delphi6-Compiler dir mindestens zwei Fehler ausspucken!

Die Schleifen-Variable i kann kein Double sein und Anz_Striche ist kein Array!

Und wenn du in der Schleife per MoveTo und LineTo auf den Canvas rummalen willst, dann musst du das auch zur Schleife per
Delphi-Quellcode:
begin end;
hinzufügen!

EDIT: Ach ja...auch Screenshots vom Ist-Zustand und dem gewünschten Zustand wären super duper hilfreich!

Chris211183 19. Nov 2013 09:41

AW: For-Schleife mit Canvas umsetzten
 
ja Du hast Recht, dass es nicht schön ist, hab das auch nur rauskopiert aus dem kompletten Quelltext !

I habe ich schon als Integer deklariert (im C, kann man das so machen, wie ich das da hab, da muss man nicht unbedingt einen Array machen !), daher meine Frage !

Aber danke ersteinmal für deine Antwort !

TiGü 19. Nov 2013 09:48

AW: For-Schleife mit Canvas umsetzten
 
Zitat:

Zitat von Chris211183 (Beitrag 1236524)
I habe ich schon als Integer deklariert (im C, kann man das so machen, wie ich das da hab, da muss man nicht unbedingt einen Array machen !), daher meine Frage !

Deine einzige Frage im ersten Post lautet: "Ich hoffe diesmal kann mir jemand folgen ?"

NEIN, kann man so nicht!

Und du programmierst in Object Pascal / Delphi und nicht in C, also kannst du das nicht machen!
Und ich sehe auch nicht, wozu du hier ein Array brauchst!
Wo wird denn überhaupt Anz_Striche mit Inhalt befüllt?

Ich hoffe, dass ist nichts Wichtiges für dein Studium was du innerhalb einer bestimmten Zeitspanne abgeben musst, denn du wurschelst an diesen Graphen ja schon seit Wochen rum, ohne zu Potte zu kommen.

DeddyH 19. Nov 2013 09:49

AW: For-Schleife mit Canvas umsetzten
 
Ich weiß nicht, wozu Du ein Array brauchst bzw. glaubst zu brauchen. Entweder ist die Anzahl der zu zeichnenden Striche vorgegeben oder der Abstand dieser zueinander. Je nachdem musst Du dann die jeweils andere Zahl berechnen und dann zeichnen. Angenommen, die Komponente ist 120 Pixel hoch und soll 21 Striche in vertikaler Richtung haben. Dann teilt man die 120 durch die 21 und rundet das Ergebnis, erhält somit den Abstand. Und den multipliziert man dann einfach mit der Schleifenvariablen, um die Y-Koordinate zu ermitteln. Bei sehr geringer Höhe und/oder sehr dichter Strichanzahl wird das Ergebnis wohl unbefriedigend ausfallen, aber das kann man auch zumindest eindämmen.

bcvs 19. Nov 2013 09:56

AW: For-Schleife mit Canvas umsetzten
 
Zur Frage kann ich nichts sagen, weil ich nicht verstehe, was Du willst und was nicht funktioniert. Wenn es um den Abstand der Striche geht, hat das wohl etwas mit deinem LabelingGap zu tun, aber es ist nicht ersichtlich, wo das herkommt.

Ergänzend zu den Anmerkungenen von TiGü:

Delphi-Quellcode:
for i := 0 to round(Anz_Striche+1)
Wieso round? Anz_Striche ist doch schon ein integer. Wenn man da 1 dazu addiert, bleibt es immer noch ein integer.

Chris211183 19. Nov 2013 10:07

AW: For-Schleife mit Canvas umsetzten
 
Width/ Anz_Striche = LabelingGap

LabelingGap * Schleifenvariable = Koordinate, das habe ich alles berechnet, mir geht es nur darum, wie ich Canvas dazu bringe, dies in meine Komponente einzuzeichenen (mit einer For_Schleife).

Danke für eure Hilfe, auch wenn ich hier immer so ein Wirrwar poste :oops:

TiGü 19. Nov 2013 10:12

AW: For-Schleife mit Canvas umsetzten
 
Zitat:

Zitat von Chris211183 (Beitrag 1236531)
LabelingGap * Schleifenvariable = Koordinate, das habe ich alles berechnet, mir geht es nur darum, wie ich Canvas dazu bringe, dies in meine Komponente einzuzeichenen (mit einer For_Schleife).

Bitte lese ein paar grundlegene Tutorials!!!

Delphi-Quellcode:
  for i := 0 to Anz_Striche - 1 do
  begin
    Canvas.MoveTo(round(OffsetUpper + i * LabelingGap), Height);
    Canvas.LineTo(round(OffsetUpper + i * LabelingGap), (Height + Barwidth) div 2);
  end;

DeddyH 19. Nov 2013 10:15

AW: For-Schleife mit Canvas umsetzten
 
Du hast es doch bereits beschrieben :gruebel:. Vielleicht nochmal eine kurze Zusammenfassung: Du nimmst die Breite bzw. Höhe und teilst diese durch die Anzahl der Striche. Die daraus resultierende Fließkommazahl merkst Du Dir, gehst dann in einer Schleife von 1 bis Strichanzahl (oder 0 bis Strichanzahl - 1) durch, multiplizierst Deinen gemerkten Abstand mit der Schleifenvariablen und rundest das Ergebnis. Das ist dann Deine X- bzw. Y-Koordinate für Canvas.MoveTo und Canvas.LineTo.

Chris211183 19. Nov 2013 10:40

AW: For-Schleife mit Canvas umsetzten
 
ja das ist soweit klar alles,

wenn ich es kompilieren lasse, flacker das Bild aber immer nur und es wird nie was gezeichnet :pale:

das ist das Problem


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr.
Seite 1 von 3  1 23      

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