Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Digital-Anzeige (https://www.delphipraxis.net/51679-digital-anzeige.html)

faux 17. Aug 2005 00:44


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.

Luckie 17. Aug 2005 00:49

Re: Digital-Anzeige
 
Gibt es da auch eine Beispielanwendung zu?

negaH 17. Aug 2005 01:30

Re: Digital-Anzeige
 
Hi Faux,

du weist schon das es TrueType Fonts gibt ?

Gruß Hagen

Luckie 17. Aug 2005 02:16

Re: Digital-Anzeige
 
Zitat:

Zitat von negaH
Hi Faux,

du weist schon das es TrueType Fonts gibt ?

Nun ja, er hat eben seine Fingerübung hier veröffentlich, dagegen ist nichts einzuwenden. ;)

Robert Marquardt 17. Aug 2005 04:53

Re: Digital-Anzeige
 
Hau die Werte in const Arrays und benutze Schleifen zur Initialisierung.

negaH 17. Aug 2005 06:29

Re: Digital-Anzeige
 
@Luckie:

Zitat:

Nun ja, er hat eben seine Fingerübung hier veröffentlich, dagegen ist nichts einzuwenden.
Das war ja von meiner Seite nur ein Hinweis. Ich sehe es genauso wie du, aber es könnte ja sein das er noch nicht wusste das es TrueType Fonts gibt die das was er umständlich in eine Komponente reinpackt viel einfacher machen können. Einfach ein TLabel, Font auf entsprechenden LED Font, von denen es hunderte gibt, und fertig.
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

KLS 17. Aug 2005 07:26

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;

faux 17. Aug 2005 08:17

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:
if (Value < 0) or (Value > 9) then
  Value := 0;
Das ist doch korrekt so, oder?
Delphi gibt mir immer folgende Warnung aus:
Code:
[Warnung] Unit2.pas(82): Der Vergleich ergibt immer Falsch

Kroko1999 17. Aug 2005 09:02

Re: Digital-Anzeige
 
Zitat:

Zitat von faux
...
EDIT:
In der Procedure SetValue würde noch das reingehören:
Delphi-Quellcode:
if (Value < 0) or (Value > 9) then
  Value := 0;
Das ist doch korrekt so, oder?
Delphi gibt mir immer folgende Warnung aus:
Code:
[Warnung] Unit2.pas(82): Der Vergleich ergibt immer Falsch

(1) ein Byte kleiner 0 gibt es noch nicht!
(2) ich hätte vMain auch weggelassen und dafür TZiffer von TCustomPanel abgeleitet. :idea:

faux 17. Aug 2005 09:22

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.

Kroko1999 17. Aug 2005 12:58

Re: Digital-Anzeige
 
Zitat:

Zitat von faux
1)...
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.

es sind nur die con TCustomPanel public/published-Methoden, und dies dürften nicht soviel sein
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!

faux 17. Aug 2005 15:56

Re: Digital-Anzeige
 
Zitat:

Zitat von Kroko1999
man kann auch auf dei UnterPanels verzichten, wenn man in Paint direkt zeichnet, beim ändern muss man nur Self.Invalidate aufrufen!

Wie??

Kroko1999 18. Aug 2005 12:16

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.

TheXception 18. Aug 2005 13:57

Re: Digital-Anzeige
 
Zitat:

Zitat von negaH
Hi Faux,

du weist schon das es TrueType Fonts gibt ?

Die müssten aber bei dem jeweiligen user installiert sein.

faux 18. Aug 2005 14:44

Re: Digital-Anzeige
 
Das obendrein....


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 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