![]() |
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; |
AW: Skala an Komponente
Zitat:
Im Ernst: Was für eine Skala? Wann soll sie gezeichnet werden? Oder meinst Du eine Achsenbeschriftung mit Achseneinteilung etc.? |
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: |
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 |
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 ? |
AW: Skala an Komponente
Zitat:
|
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: |
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. |
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...
|
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 09:25 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