AGB  ·  Datenschutz  ·  Impressum  







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

Skala an Komponente

Ein Thema von Chris211183 · begonnen am 11. Nov 2013 · letzter Beitrag vom 12. Nov 2013
Antwort Antwort
Chris211183

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

Skala an Komponente

  Alt 11. Nov 2013, 11:34
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;
Christian
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Skala an Komponente

  Alt 11. Nov 2013, 14:20
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.?
  Mit Zitat antworten Zitat
Chris211183

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

AW: Skala an Komponente

  Alt 11. Nov 2013, 14:27
genau das !


Ich beschreib mein Problem mal genauer


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
Christian
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Skala an Komponente

  Alt 11. Nov 2013, 14:36
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
  Mit Zitat antworten Zitat
Chris211183

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

AW: Skala an Komponente

  Alt 11. Nov 2013, 14:45
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 ?
Christian
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Skala an Komponente

  Alt 11. Nov 2013, 18:38
wäre es dann besser, anstatt der Case of- Anweisung mit if/Else zu arbeiten ?
Du hast Probleme Erstmal zum laufen bringen. Hübsch kann es dann immer noch werden.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:37 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