Delphi-PRAXiS
Seite 4 von 12   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OOP-TRealEdit von TEdit abgeleitet und Fähigkeiten erweitert (https://www.delphipraxis.net/3975-oop-trealedit-von-tedit-abgeleitet-und-faehigkeiten-erweitert.html)

Hansa 14. Apr 2003 11:44

Liste der Anhänge anzeigen (Anzahl: 1)
hier der Fehler

Hansa 14. Apr 2003 13:20

Ich habe eine Vermutung. Die stelle ich mal so in den Raum : Bei einem TLabeledEdit ist das Label eher ein Panel, als ein Label. Könnte das sein ?

Motzi 14. Apr 2003 13:35

Zitat:

Zitat von Hansa
Ich habe eine Vermutung. Die stelle ich mal so in den Raum : Bei einem TLabeledEdit ist das Label eher ein Panel, als ein Label. Könnte das sein ?

Hm.. glaub ich eigentlich nicht... aber ich kann momentan nur Vermutungen anstellen, da ich auf meinem Zivi-Arbeitsplatz sitz. Hab erst wieder zu Hause ein Delphi zur Verfügung.

nailor 14. Apr 2003 15:21

Zitat:

Zitat von Hansa
Zitat:

Zitat von Nailor
...aber jetzt ist der Moment gekommen...noch jemand ein SpinEdit so umbastelt, dass es damit arbeitet...

Anscheinend bist Du tatsächlich der erste, der das Original-Orakel in Delphi gefunden hat. :mrgreen: Welcher Moment ist wozu gekommen? Und womit soll ein SpinEdit arbeiten ? Was soll das überhaupt sein ?

Welches Original-Orakel? Der Moment, in dem ein SpinEdit mit rechtsbündigen Zahlen praktisch wäre, ist gekommen. Sollte die zweite Frage beantworten. Ich hätte gerne die SpinEdit-Komponente aus der Samples-Abteilung mit dem Text nicht links, sondern rechts!

Hansa 15. Apr 2003 14:12

Dann kupfere doch mein RealEdit ab und erweitere das Spinedit. So wie ich das mit dem TEdit gemacht habe. Du brauchst sogar nur das fAlignment und die zugehörigen Funktionen einzubauen. Alles andere am besten rausschmeißen. Der Thread hier müßte eigentlich ein gute Vorlage sein. Ich habe doch den ganzen Quelltext sogar als Anhang mitgeschickt. Und glaube Daniel B sogar das fertige Package. 8)

oki 15. Apr 2003 16:18

Hi Hansa,

ich würde mal gern mit reinschauen. Wo finde ich den aktuellen Code?

Gruß oki

Hansa 16. Apr 2003 12:33

Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe den Tausenderpunkt hinbekommen, werde ihn aber nicht benutzen. Und zwar aus einem trivialen Grund: Der Punkt muß ja durch die Zahl "hüpfen". Und das ist einfach nur irritierend. Deweiteren muß der DecimalSeparator auch noch berücksichtigt werden. An diesem Punkt hab ich dann aufgehört. die exe hängt hier dran. Wer den Source braucht, soll sich melden. Ich will in dem Thread hier nicht zu viel durcheinander bringen.

Hansa 16. Apr 2003 12:46

hier ist noch der momentane Code (das Label will einfach noch nicht) :

Code:
Unit RealEdit;

interface

uses
  Windows, Messages, SysUtils,
  Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls,ExtCtrls;

procedure Register;

type
  TRealEdit = class(TCustomEdit)
  private
    fAlignment:TAlignment;
    fOnlyReals:boolean;
    fLabel:TLabel;
    procedure SetAlignment(Value:TAlignment);
    procedure SetOnlyReals(Value:boolean);
  protected
    procedure SetLabel(Value:TLabel);
    procedure CreateParams(var Params:TCreateParams); override;
    procedure KeyPress(var Key:Char); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor destroy; override;
  published
    property Alignment: TAlignment read fAlignment write SetAlignment;
    property OnlyReals: Boolean read fOnlyReals write SetOnlyReals;
    property RealLabel: TLabel read fLabel write SetLabel;
  end;

implementation

procedure TRealEdit.SetLabel (Value : TLabel);
  begin
   fLabel := value;
   flabel.SetSubComponent(true);
  end;

constructor TRealEdit.Create(AOwner: TComponent);
begin
  inherited;
  FAlignment := taRightJustify;
  OnlyReals := true;
  FLabel := TLabel.Create(AOwner);
//  FLabel.Parent := AOwner;
  FLabel.Name := 'RealLabel';
  FLabel.SetSubComponent(true);
  FLabel.Caption := 'CAPTION';
end;

destructor TRealEdit.Destroy;
  begin
    FLabel.Destroy;
    inherited;
  end;

procedure TRealEdit.CreateParams(var Params: TCreateParams);
const Alignments: array[TAlignment] of byte=(ES_Left, ES_Right, ES_Center);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or Alignments[fAlignment];
  fAlignMent := taRightJustify;
end;

procedure TRealEdit.KeyPress(var Key:Char);
var ZulZeichen : SET OF char;
begin
  inherited KeyPress(Key);
  if OnlyReals then begin
    ZulZeichen := ['0'..'9',#8];
    if pos (DecimalSeparator,text) = 0 THEN // kein . im RealEdit.text . zulassen
      ZulZeichen := ZulZeichen + [DecimalSeparator]
    else
      ZulZeichen := ZulZeichen - [DecimalSeparator]; // zweiten . verhindern
    if not (Key in ZulZeichen) then
      Key := #0;
  end;
end;

procedure TRealEdit.SetAlignment (value:TAlignment);
begin
  fAlignment:=value;
  RecreateWnd;
end;

procedure TRealEdit.SetOnlyReals (value:boolean);
begin
  fOnlyReals:=value;
  RecreateWnd;
end;

procedure Register;
begin
  RegisterComponents('Eigene', [TRealEdit]);
end;

end.

oki 16. Apr 2003 12:56

Hi Hansa,

ich hab mir die pas angeschaut. Da sind mir ein par Fragen gekommen. (ich würde die gerne mal erörtern, wobei es nicht darum geht, dass ich damit recht habe)

Deine Methode KeyPress.

Du rufst inherited KeyPress(Key) am Anfang auf und bearbeitest dann nachträglich den Wert im Edit.

Warum nicht prüfen, verändern und dann mit keypress über inherited weiterverarbeiten lassen? so nach dem Motto:

Delphi-Quellcode:

procedure TRealEdit.KeyPress(var Key:Char);
var ZulZeichen : SET OF char;
    Old Key : Char;
begin
  if OnlyReals then begin
    ZulZeichen := ['0'..'9',#8];
    IF not (Key in ZulZeichen) then begin
      Key := #0;
      Exit;
    end;
    OldKey := Key;
    IF (pos (DecimalSeparator,text) = 0) and Length(Text) = 3 then begin
      Key := '.';
      Inherited KeyPress(Key);
    end;
    inherited keypress(OldKey);
  end;
end;
Also, ist jetzt nicht grad sehr elegant (OldKey ist Quatsch, würde '.' direkt reinschreiben) aber im Prinzip nach der Art.

Außerdem ist der Dezimalseperator nicht der Punkt als Tausendertrennzeichen sondern das Komma; dächte ich.

Gruß oki

Hansa 16. Apr 2003 16:40

Lese nicht den Kommentar, sondern die Source : :mrgreen:

Code:
ZulZeichen := ZulZeichen + [DecimalSeparator]
Das dürfte wohl genügen. Und dann lese noch den Beitrag von vorhin, der Tausenderseperator interessiert im Moment nicht, es geht nur noch um das Label.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
Seite 4 von 12   « Erste     234 56     Letzte »    

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