![]() |
Liste der Anhänge anzeigen (Anzahl: 1)
hier der Fehler
|
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 ?
|
Zitat:
|
Zitat:
|
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)
|
Hi Hansa,
ich würde mal gern mit reinschauen. Wo finde ich den aktuellen Code? Gruß oki |
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.
|
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. |
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:
Also, ist jetzt nicht grad sehr elegant (OldKey ist Quatsch, würde '.' direkt reinschreiben) aber im Prinzip nach der Art. 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; Außerdem ist der Dezimalseperator nicht der Punkt als Tausendertrennzeichen sondern das Komma; dächte ich. Gruß oki |
Lese nicht den Kommentar, sondern die Source : :mrgreen:
Code:
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.
ZulZeichen := ZulZeichen + [DecimalSeparator]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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 by Thomas Breitkreuz