AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

For-Schleife mit Canvas umsetzten

Ein Thema von Chris211183 · begonnen am 19. Nov 2013 · letzter Beitrag vom 20. Nov 2013
Antwort Antwort
Seite 1 von 3  1 23      
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#1

For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 10:23
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;
Christian
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 10:38


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 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 begin end; hinzufügen!

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

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#3

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 10:41
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 !
Christian
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 10:48
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 10:49
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#6

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 10:56
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ü:

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.
  Mit Zitat antworten Zitat
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#7

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 11:07
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
Christian
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 11:12
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 11:15
Du hast es doch bereits beschrieben . 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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#10

AW: For-Schleife mit Canvas umsetzten

  Alt 19. Nov 2013, 11:40
ja das ist soweit klar alles,

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

das ist das Problem
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz