Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Skala an Komponente (https://www.delphipraxis.net/177514-skala-komponente.html)

Chris211183 11. Nov 2013 11:34

Skala an Komponente
 
Hallo Delphianer,

ich möchte an meiner Komponente an der linken Seite eine Messskala haben, wobei ich nicht genau weiß, wie ich das jetzt am Dümmsten anstellen soll, kann...
jemand einen Tip ?


Delphi-Quellcode:
type
THixBargraphKind = (sbHorizontal, sbVertical);
 THixBarGraphLabelingOrientation = (lboAbove, lboBelow, lboLeft, lboright);


private
FKind : THixBarGraphKind;
FLabelingStyle : ThixBarGraphLabelingStyle;
procedure SetKind(const Value: THixBarGraphKind);
procedure SetLabellingStyle(const Value: ThixBarGraphLabelingStyle);

published
property LabellingStyle : THixBarGraphLabelingStyle read FLabellingStyle write SetLabellingStyle;
Property LabelingFont : TFont read FLabelingFont write SetLabelingFont;

….....

implementation

…....
destructor THixBarGraph.Destroy;
begin
  inherited Destroy;
end;

procedure THixBarGraph.Paint;
var
   R: TRect;

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

  case FKind of

      sbHorizontal :
          R := Rect(OffsetUpper,
                   (Height - Barwidth) div 2,
                    Width - OffsetLower,
                   (Height + Barwidth) div 2);

      sbVertical :
          R := Rect((Width - BARWIDTH) div 2,
                     Height - (Height - OffsetUpper),
                     (Width + BARWIDTH) div 2,
                     Height - OffsetLower);
          end;

                 Canvas.Brush.Color := FColor;
                 Canvas.FillRect(Rect(0, 0, Width, Height));
                 Canvas.Brush.Color := FBarColor;
                 Canvas.FillRect(R);
                 Frame3D(Canvas, R, clBtnShadow, clBtnHighlight, 1);
end;

procedure THixBarGraph.SetKind(const Value: THixBarGraphKind);
begin
   if FKind <> Value
   then
   begin
       FKind := Value;
       invalidate;
   end;
end;

procedure THixBarGraph.SetOffsetLower(const Value: Integer);
begin
   if FOffsetLower <> Value
   then
     begin
       FOffsetLower := Value;
       invalidate;
     end;

end;

procedure THixBarGraph.SetOffsetUpper(const Value: Integer);
begin
   if FOffsetUpper <> Value
   then
     begin
       FOffsetUpper := Value;
       invalidate;
     end;

end;

Furtbichler 11. Nov 2013 14:20

AW: Skala an Komponente
 
Zitat:

Zitat von Chris211183 (Beitrag 1235392)
wie ich das jetzt am Dümmsten anstellen soll, kann...
jemand einen Tip ?

Der dümmste Tip, der mir einfällt, ist: Implementiere das in der Paint-Methode.

Im Ernst: Was für eine Skala? Wann soll sie gezeichnet werden? Oder meinst Du eine Achsenbeschriftung mit Achseneinteilung etc.?

Chris211183 11. Nov 2013 14:27

AW: Skala an Komponente
 
genau das !


Ich beschreib mein Problem mal genauer :wink:


Es geht jetzt darum, dass ich verschiedene Skalenbereiche für den Graphen haben möchte, quasi Linien, Zahlen, beides zusammen, etc...
Diese Wertebereiche sollen Variabel sein, möchte ich mit Value, ValueMin und ValueMax definieren vom Rückgaberwert Double.
Nun könnte ich ja Canvas.LineTo benutzen (was nur Integer zurück gibt), desweiteren, soll das ganze ja aber auch bei horizontaler und verticaler Ansicht von der Komponente passen..., stehe hier voll auf dem Schlauch, Ideen sind da, nur an der Umsetztung haperts seid nen paar Tagen :oops:

Furtbichler 11. Nov 2013 14:36

AW: Skala an Komponente
 
Ah.
Je eine Routine zum Zeichnen der Skala links, rechts, oben bzw. unten. Kann man alles in einer Routine machen, wird aber unübersichtlich. Mit der Zeichenroutine hast Du auch gleich die Abmessungen des Bereichs (also dort, wie die Beschriftungen etc. hinsollen) bzw. legst diese Fest. Beispielsweise ergibt sich die Breite einer vertikalen Skala mit Beschriftung aus der Breite des längsten Labels + Zwischenraum + Majortick-Länge.

Und wenn Du das dann schon hast (Also die Abmessungen), ergibt sich der Rest fast von alleine.

Du kannst ja zuerst die Achsen einzeichnen und in den Routinen die Breite/Höhe bestimmen (brauchst Du ja zum Zeichnen). Wenn Du dann den Grafikbereich zeichnen willst, hast Du schon den Offset links/rechts/oben/unten.

Die Problematik 'Float=>Integer' bekommst Du ja mit nem Dreisatz hin: X-Pixel = x-linker-Offset + (X-xMin)/Breite-Grafikbereich-in-Pixel

Chris211183 11. Nov 2013 14:45

AW: Skala an Komponente
 
wow :?, ja an der Mathematik solls nicht hapern, an der Implementation ehr...

hast Du irgendwie nen Beispiel, wie und wo man das am einfachsten macht ?
wäre es dann besser, anstatt der Case of- Anweisung mit if/Else zu arbeiten ?

Furtbichler 11. Nov 2013 18:38

AW: Skala an Komponente
 
Zitat:

Zitat von Chris211183 (Beitrag 1235421)
wäre es dann besser, anstatt der Case of- Anweisung mit if/Else zu arbeiten ?

Du hast Probleme :-D Erstmal zum laufen bringen. Hübsch kann es dann immer noch werden.

Chris211183 11. Nov 2013 19:02

AW: Skala an Komponente
 
ja da hast Du Recht :P, wie mit den Frauen so´n Quellcode :pale: (an alle Feministinnen, es ist ein Spaß !!!)

ne geht einfach nur darum, dass da links Striche dran sein sollen erstmal und immer im gleichen Abstand, (theoretisch is das kein Ding, bloß Praktisch ist der Chris da überfordert, weil ihm da ein paar Jahre Delphi fehlen), der Compiler weißt mich immer wieder darauf hin, dass das kein C++ ist:stupid:, was ich auch weiß...

erstmal nur Striche am linken rand über lbsLines in der Paint-Methode an BEIDEN sbVertical und sbHorizontal..., ich fang hier bald an zu trinken...

programmieren, macht ganz schnell, verdammt alt :cheers:

stahli 11. Nov 2013 20:20

AW: Skala an Komponente
 
Mal ein Tipp:

- erst mal EINE Linie horizontal zeichnen
- dann abhängig von der Ausrichtung horizontal oder vertikal
- dann mehrere Linien

Also heran tasten sozusagen.

Dann kannst Du bei Problemen auch gezielter bzw. genauer nachfragen und wir können besser helfen.

Bei Deinen Fragestellungen wären auch Screenshots sinnvoll, was Du schon hast und Skizzen, was Du brauchst.

Chris211183 12. Nov 2013 10:46

AW: Skala an Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, im Anhang ein Screenshot, links meine derzeitige Komponente, rechts, wie sie mal aussehen soll...

stahli 12. Nov 2013 11:23

AW: Skala an Komponente
 
Also ich versuche es mal:
- Left, Right, Top, Bottom für den Skalenbereich berechnen (optisch vorerst mit Rect zeichnen kontrollieren)
- Abstand festlegen
- Schleife Y von Top bis Bottom mit Abstand durchlaufen
- Linie zeichnen von Left/Y->Right/Y

Wo es klemmt, nochmal nachfragen.
Wenn Du die Sache strukturiert und überlegt angehst, dann sollte das schon klappen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr.
Seite 1 von 2  1 2      

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