![]() |
Digital-Anzeige
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo!
Mir war mal etwas langweilig und da hab ich eine Digitalanzeige programmiert. Man kann sicherlich was dran verbessern. Bitte um vorschläge. Grüße Faux EDIT: Habe mal die aktuelle Version angehängt, dass der Thread übersichtlicher wird. |
Re: Digital-Anzeige
Gibt es da auch eine Beispielanwendung zu?
|
Re: Digital-Anzeige
Hi Faux,
du weist schon das es TrueType Fonts gibt ? Gruß Hagen |
Re: Digital-Anzeige
Zitat:
|
Re: Digital-Anzeige
Hau die Werte in const Arrays und benutze Schleifen zur Initialisierung.
|
Re: Digital-Anzeige
@Luckie:
Zitat:
Aus eigener Erfahrung kann ich sagen das ich schon einige Sachen programmiert habe und später feststellen musste das es um vieles einfacher geht. Das einzigste was mir eben damals gefehlt hatte, war Wissen darum das es einfacher geht und eben eine Person die es mir auch sagte ;) Ist also keinerlei Kritik gewesen, einfach ein Hinweis. Gruß Hagen |
Re: Digital-Anzeige
Hiermal die ganze sache mit Arrays. Macht das nen stückchen kürzer ;)
Delphi-Quellcode:
constructor TZiffer.Create(AOwner : TComponent; Parent : TWinControl);
const Positionen : array[0..6,0..3] of integer = ((9,33,48,16),(33,9,16,8),(9,33,8,16),(33,9,16,48),(33,9,56,48),(9,33,88,16),(33,9,56,8)); var i : Byte; begin vMain := TPanel.Create(AOwner); vMain.Parent := Parent; vMain.Width := 65; vMain.Height := 105; for i := 0 to 6 do begin vPanels[i] := TPanel.Create(AOwner); with vPanels[i] do begin Parent := vMain; Height := Positionen[i,0]; Width := Positionen[i,1]; Top := Positionen[i,2]; Left := Positionen[i,3]; end; end; end; procedure TZiffer.SetValue(Value : Byte); const Werte : array[0..9,0..6] of byte = ((0,1,1,1,1,1,1),(0,0,0,1,1,0,0),(1,0,1,1,0,1,1),(1,0,1,1,1,1,0),(1,1,0,1,1,0,0),(1,1,1,0,1,1,0),(1,1,1,0,1,1,1),(0,0,1,1,1,0,0),(1,1,1,1,1,1,1),(1,1,1,1,1,1,0)); var i : byte; begin for i := 0 to 6 do vPanels[i].Visible := bool(Werte[value,i]); vValue := Value; end; |
Re: Digital-Anzeige
Danke, KLS und Robert! So ist das Programm nur noch mehr 1/3 so groß... ;)
Ja, ich weiß dass es solche Fonts gibts, nur dann hätt ich ja nix zu tun... ;) Beispielanwenung im 1. Post. EDIT: In der Procedure SetValue würde noch das reingehören:
Delphi-Quellcode:
Das ist doch korrekt so, oder?
if (Value < 0) or (Value > 9) then
Value := 0; Delphi gibt mir immer folgende Warnung aus:
Code:
[Warnung] Unit2.pas(82): Der Vergleich ergibt immer Falsch
|
Re: Digital-Anzeige
Zitat:
(2) ich hätte vMain auch weggelassen und dafür TZiffer von TCustomPanel abgeleitet. :idea: |
Re: Digital-Anzeige
1) Ups... Jap, ich dachte das is ein Integer... :oops:
2) Aber dann hab ich die ganzen TPanel Methoden und eigenschaften im Root (nennt man das da so?). Also wenn ich TZiffer. schreibe, dann kommt gleiche eine Liste mit allen TPanel Methoden und das finde ich hier IMHO etwas überflüssig. |
Re: Digital-Anzeige
Zitat:
ich wollte nämlich aus dem 1.Beitrag TZiffer.SetBounds (...) aufrufen und dies ging nicht! //EDIT: man kann auch auf dei UnterPanels verzichten, wenn man in Paint direkt zeichnet, beim ändern muss man nur Self.Invalidate aufrufen! |
Re: Digital-Anzeige
Zitat:
|
Re: Digital-Anzeige
so
Delphi-Quellcode:
unit unitZiffer;
interface uses Classes, Graphics, ExtCtrls; type {-- Range --} TValueRange = 0..9; {-- Class: --} TCustomZiffer = class (TCustomPanel) constructor Create (AOwner: TComponent); override; private FNumerus: TValueRange; FBarColor: TColor; FFrameColor: TColor; procedure SetNumerus(const Value: TValueRange); procedure SetBarColor(const Value: TColor); procedure SetFrameColor(const Value: TColor); protected procedure Paint; override; property Numerus: TValueRange read FNumerus write SetNumerus; property BarColor: TColor read FBarColor write SetBarColor; property FrameColor: TColor read FFrameColor write SetFrameColor; public end; {-- Class: --} TZiffer= class (TCustomZiffer) public published property Numerus; property BarColor; property FrameColor; // hier kann man weitere Eigenschaften, die man benötigt freigeben end; implementation { TCustomZiffer } constructor TCustomZiffer.Create(AOwner: TComponent); begin inherited; FNumerus := 0; FBarColor := clRed; FFrameColor := clYellow; Width := 65; Height := 105; end; procedure TCustomZiffer.Paint; const coBars: array[TValueRange] of Byte = ($7E,$18,$6D,$3D,$1B, $37,$77,$1C,$7F,$3F); coPos: array[0..6,0..3] of Integer = ((9,33,48,16),(33,9,16,8),(9,33,8,16), (33,9,16,48),(33,9,56,48),(9,33,88,16),(33,9,56,8)); var I,B: Byte; begin inherited; B := 1; Canvas.Brush.Color := FBarColor; Canvas.Pen.Color := FFrameColor; for I := 0 to 6 do begin if (B and coBars[FNumerus])>0 then begin Canvas.Rectangle(coPos[I][3],coPos[I][2], coPos[I][3]+coPos[I][1], coPos[I][2]+coPos[I][0]); end; B := B shl 1; end; end; procedure TCustomZiffer.SetBarColor(const Value: TColor); begin if Value<>FBarColor then begin FBarColor := Value; Invalidate; end; end; procedure TCustomZiffer.SetFrameColor(const Value: TColor); begin if FFrameColor<>Value then begin FFrameColor := Value; Invalidate; end; end; procedure TCustomZiffer.SetNumerus(const Value: TValueRange); begin if Value<>FNumerus then begin FNumerus := Value; Invalidate; end; end; end. |
Re: Digital-Anzeige
Zitat:
|
Re: Digital-Anzeige
Das obendrein....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 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