![]() |
OOP-TRealEdit von TEdit abgeleitet und Fähigkeiten erweitert
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
was jetzt kommt bezieht sich hierauf: ![]() Es geht um OOP. Die Quelltexte hänge ich mal als Anhang dran. Um es vorweg zu sagen, es funktioniert, aber ich blicke nicht richtig durch warum eigentlich. :shock: Das ist nun eine neue Komponente, die real, oder irgendwelche Zahlenfelder rechtsbündig behandelt. Wenn es genau so, wie ich gleich erklären werde, installiert wird, befindet sich in der Objektablage bei "Data Controls" noch eine Komponente "RealEdit". Diese hat im OI noch eine property Alignment. Diese kann man nun auf rechts, links oder zentriert einstellen. Bei Zahleneingaben ist das wie bei einem Taschenrechner. D.h. statt der Komponente DBedit zieht man einfach ein DBrealEdit auf die Form und stellt die Ausrichtung ein. Wie gesagt, ich raffe das selbst noch nicht genau, was da hinter den Kulissen passiert. Das ganze ist aus Anregungen zusammengestückelt. Ein paar Fragen stelle ich selber noch zum Schluß. Die Installation ist folgendermaßen zu bewerkstelligen : File->new->other->package->Add nun muß die Datei "realedit.pas" ausgewählt werden. Dann noch "compile" und "install". Dann müßte die neue Komponente bei "Data Controls" zu finden sein. Die wird dann genau so behandelt wie ein Button o.Ä. Nun meine Fragen: 1. SetAlignment läßt sich nur compilieren, wenn es so ist, wie es jetzt ist. Lasse ich den Parameter weg, meldet Delphi "incompatible Types", aber ich brauche nur eine rechtsbündige Ausrichtung, für linksbündig nehme ich sowieso das "normale" DBedit. Und Center, was soll ich damit ? 2. Im OI steht standardmäßig taLeftJustify. Wie kann ich das umbiegen, daß da taRightJustify drin steht. Damit hätte sich die erste Frage erledigt. 3. Was macht CreateParams konkret? Ach so, noch zur Erläuterung : im private-Abschnitt steht die neue Eigenschaft, also Alignment. Dazu dient das FAlignment, welches in SetAlignment gesetzt wird. Um es im OI angezeigt zu bekommen MUß das ganze als published deklariert werden. Das ist wichtig. Sieht man sich das ganze an, im Prinzip nur 4 Zeilen :!: , die in einem riesigen Programm an jeder Ecke benutzt werden könnten. [edit=Daniel B]Titel angepasst, da viele neue sachen dazu gekommen sind. MfG Daniel :hi:[/edit] |
invalid Session hat wieder zugeschlagen. :twisted:
Hier ist noch ein Beispiel für ein kleines Programm:
Code:
Wird im Edit1 etwas eingegeben stehen die Daten rechtsbündig oder wie auch immer in DBrealEdit1.
unit RealEd;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, FIBDatabase, pFIBDatabase, FIBDataSet, pFIBDataSet, StdCtrls, Mask, DBCtrls, RealEdit; type TForm1 = class(TForm) DBRealEdit1: TDBRealEdit; pFIBDatabase1: TpFIBDatabase; pFIBDataSet1: TpFIBDataSet; pFIBTransaction1: TpFIBTransaction; DataSource1: TDataSource; procedure Edit1Exit(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Edit1Exit(Sender: TObject); begin pFIBdataset1.Active := false; pFIBdataset1.SelectSQL.Text := 'SELECT * FROM <TABELLENNAME> WHERE NR = '+Edit1.Text; pFIBdataset1.Active := true; end; end. |
Hallo,
äähm, kann es sein dass das ganze nicht mit PE funktioniert? So wie ich das sehe muss man wenisgtens Prof. haben, wegen dem DBEdit. So würde das ganze hier nicht vielen was bringen. ;) Grüsse, Daniel :hi: |
jo, mit PE gehts wohl nicht, sorry. Denke in einer anderen Dimension. :mrgreen: Aber wie wäre es probeweise das DB in den Typ-Bezeichnungen wegzulassen :?: Ansonsten genau so vorgehen wie beschrieben. Dann einmal das Alignment ändern und zur Entwurfszeit sehen, wie es aussieht.
Für die, die das schon installiert haben : das Package einfach neu compilieren und die Palettenseite der Objektablage z.B. in "Beispiel" ändern, statt "Data Controls" |
Hallo,
ich habe ein Package erzeugt das vom normlaen Edit abstammt. Zip runterladen und dann Doppelklick auf die HansaRealEdit.dpk. Danach erscheint die neue Komponenten auf der Palette Standard. Ganz rechts, ist das gleiche Icon wie beim normalen Edit. Grüsse, Daniel :hi: Nachtrag: Doppelklick auf die Komponenten, dann kommt ein Fensterlein, dort auf Install und dann ist es fertig! |
Damit sich keiner den Strick holt 8):
Noch etwas wichtiges, Delphi ist manchmal dumm. :bouncing4: Ist irgendetwas schief gelaufen, falsche Palettenseite usw. dann stellt Delphi sich etwas quer. "Die Komponente x kann nicht installiert werden, weil sie schon in package y drin ist" oder so ähnlich. Sollte so etwas auftauchen, dann muß man folendes tun : Components --> Install Packages --> in der Liste die zu entfernende Komponente suchen (Ja wirklich: Installieren aufrufen, um etwas zu beseitigen :!: :wall: ). Dann Remove/entfernen und ok. Ansonsten gehts schief. Und dann wie beschrieben fortfahren. Und noch was : im Moment wirkt sich das Alignment im OI nicht aus oder nicht unbedingt wie gewünscht, weil es konstant auf taRightJustify eingestellt ist. Ursprünglich wollte ich es konstant so lassen. Es stellte sich aber heraus, daß das SetAlignment einen Parameter braucht. Siehe meine eigenen Fragen. |
Alignment kann so richtig aktiviert werden:
Code:
procedure TRealEdit.SetAlignment (value:TAlignment);
begin fAlignment:=value; RecreateWnd; end; |
Hallo,
also Eure Begeisterung zum Thema OOP ist berauschend. :roll: Muss ich jetzt einfach mal so sagen. Ich dachte das interesse an dem Thema gibt. Und es gibt auch Personen die sich jetzt deswegen Arbeit machen. Interessierts jetzt doch keinen mehr? Grüsse, Daniel :hi: |
Hi Daniel B,
sonst brauche ich hier wohl niemanden zu begrüßen. :roll: Das KeyPress mußte noch etwas geändert werden. da müssen natürlich noch . und , rein, sonst ginge nur integer. Dann wurde das OnlyReals nicht berücksichtigt, die Abfrage ob true oder false muß da auch noch rein. Dann habe ich noch taRightJustify in den Constructor CreateParams eingebaut. Da das Vorfahrobjekt TEdit ist, ist dies standardmäßig von Delphi auf "linksbündig" gesetzt. Der Grund ist einfach nur Faulheit, damit man nicht jedesmal im OI das umändern muß. Jetzt ist zwar alles schön rechtsbündig, aber die Methode ist zu hart. Man kann nun nicht mehr taCenter oder taLeftjustify einstellen. Das muß irgendwo anders rein, bloß wo?
Code:
Noch ein Schönheitsfehler : Das Dezimalzeichen (im Moment kann . oder , verwendet werden) kann man eingeben sooft man will. D.h. da müßte noch ein Exception-Handler eventuelle Fehler abfangen. Besser wäre es, sobald ein '.' oder ',' eingegeben wird, eine zweite zu blockieren. Dabei spielt dann auch noch Backspace eine Rolle. wird das einzige DecChar gelöscht sollte man es wieder eingeben können.
procedure TRealEdit.CreateParams(var Params: TCreateParams);
const Alignments: array[TAlignment] of byte=(ES_Left, ES_Right, ES_Center); begin inherited CreateParams(Params); fAlignment := taRightJustify; Params.Style := Params.Style or Alignments[fAlignment]; end; procedure TRealEdit.KeyPress(var Key:Char); begin inherited KeyPress(Key); if OnlyReals then begin if not (Key in ['0'..'9','.',',',#8]) then Key := #0; end; end; |
Hiermit braucht man nicht einmal eine Exception abzufangen. Über die Tastatur sind Eingaben wie "53.,.543.3435,,,543.43" nun ausgeschlossen:
Code:
Jetzt wäre es vielleicht noch schön, auch den Tausenderpunkt zu berücksichtigen und automatisch zu setzen. Wegen der tollen Resonanz hier, werde ich das wohl auch selber machen müssen.
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; Zwischenbericht: alle Eigenschaften der Delphi Standardkomponente TEdit wurden an die neue Komponente TRealEdit vererbt, dann wurden einige Methoden überschrieben und somit durch eigene ersetzt. Um dies zu vereinfachen wurden im OI zwei zusätzliche Felder eingefügt: "Alignment" und "RealsOnly", siehe "published"-Sektion. Also kann ein Edit-Feld nach Belieben rechts/linksbündig oder zentriert eingegeben/angezeigt werden. Steht OnlyReals auf false, können beliebige Zeichen eingegeben werden, RealEdit.text kann dann halt ausgerichtet werden. Steht es auf true, werden nur Zahlen akzeptiert, wobei ein Komma nicht mehrfach eingegeben werden kann. Das schließt falsche Zahleneingaben aus. Desweiteren wurde ein Package erstellt -> compiliert -> installiert, so daß die Komponente wie gewohnt einfach auf eine Form gezogen werden kann. P.S. (das kann ich mir jetzt doch nicht verkneifen) : zumindest für mich ist es unbegreiflich, daß anscheinend von 99% nur das vorgekaute von Borland benutzt wird. Delphi ist von Grund auf objektorientiert ausgelegt. Alle Komponenten, die ihr benutzt, egal ob Button oder Table sind in ähnlicher Weise von Borland erstellt worden. Da führen sie bei Delphi 6 TLabeledEdit (ist nicht viel mehr, als das TRealEdit hier) ein und schon werden sie Tausende von Updates los. Und ihr Tausende Euros. :mrgreen: Das soll verstehen, wer will. Gott sei Dank gibt es keine Pisa-Studie über deutsche Programmierer. Die würde weit schlimmer ausfallen, als die von den Schülern. :bounce2: Finde ich ziemlich traurig, so was. |
Moin Hansa,
irgenwie hab' ich den Eindruck, dass die hier meist schnellen Antworten auf Fragen/Beiträge verwöhnen :mrgreen: Zu Deinen Fragen:
Wenn die Meldung: Zitat:
Deshalb sollte man auch seinen Komponenten immer einen Prefix verpassen um die Wahrscheinlichkeit von Kollisionen zu verringern. Dazu gab's bei Borland sogar mal die Möglichkeit "seinen" Prefix registrieren zu lassen. (Beispiel RxLib: Hier fangen die Kompos immer mit Trx an) Zitat:
Eine Komponente zu schreiben und zu testen kann teurer sein, als eine entsprechende fertige zu kaufen. Vielleicht ändert sich ja durch Diesen und ähnliche Threads etwas, und es fangen doch ein paar mehr mit der Eigenentwicklung an, nachdem die Hemmschwelle erst einmal überwunden ist. ;-) |
Hi, Christian, willkommen im Club. :mrgreen:
Zitat:
Zitat:
Zitat:
Und nun noch zu meinen 99%: vielleicht ist das zu viel, aber ich mache mal folgende Rechnung auf : 1. fast 1200 registrierte Benutzer 2. Zahl der Gäste wesentlich höher (gerade im Moment das 10-fache) 3. Insgesamt 125 Aufrufe des Themas. 4. Antworten von 2 Benutzern. Das sind dann 1.6 Promille. Also das wären 99.84 %, die das alles nicht nutzen. Gehen wir mal von den Lesezugriffen aus : Falls jeder User das ganze nutzt und sich EINMAL durchliest, haben immer noch 90% kein Interesse. Rechnet man die Gäste hinzu landen wir wieder bei 99%. Traurig, traurig, aber mir egal. Das Thema ist wichtig, das weiß ich. |
Moin Hansa,
Zitat:
Füg' einen hinzu und initialisiere dort die Ausrichtung. Dafür ist der constructor auch da. |
wo soll ich denn den am besten einbauen ? Soll ich da Parameter benutzen ?
|
Moin Hansa,
ich hoffe mal Dich jetzt richtig verstanden zu haben: I.d.R. wird ein constructor unter public angelegt, und mit dem Namen Create versehen. So in der Art:
Delphi-Quellcode:
//...
published constructor Create(AOwner : TComponent); override; //... implementation constructor TDBRealEdit.Create(AOwner: TComponent); begin inherited; FAlignment := taRightJustify; end; //... |
sieht aus, als wärs das gewesen. Und nun das nächste:
Code:
Man beachte die Zeile :
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 else begin if length (text) = 3 then text := text + '.'; end; end; end;
Code:
Testweise soll bei dem 3. Zeichen ein Tausenderpunkt kommen. So sollte es aussehen: 123.456 und das kommt dabei heraus : 456123. Der Punkt ist zwar gesetzt, aber die Eingabe beginnt danach vor der 1. Zuerst also 4123. dann 45123. usw. Sieht da jemand mehr als ich ?
text := text + '.'
|
@Christian Seehase
Warum muss schreibst du den Konstruktor in den Published Teil der Klasse? Wie du auch erwähnt hast schreibt man ihn immer in den Public Teil der Klasse, was ich auch immer mache. Worin besteht jetzt darin der Unterschied? |
Moin Hawk,
da hab' ich nicht aufgepasst. Der constructor sollte natürlich in den public Teil :oops: published ist ja auch eine Borland Spezialität für den OI. |
die Spezialität ist: protected. ähmmm
|
Ich habs bis jetzt noch nicht gebraucht, aber jetzt ist der Moment gekommen. Und es ist sehr gut. Wenn jetzt noch jemand ein SpinEdit so umbastelt, dass es damit arbeitet, dann ist demjenigen mein Dank sicher!!!
:firejump: |
Zitat:
|
So ich habe das ganze jetzt noch um ein Label erweitert:
Code:
Die Caption ist explizit gesetzt als CAPTION und steht so auch im OI. Der Haken an der Sache ist aber, daß das Label zwar offensichtlich existiert, aber nirgends in Erscheinung tritt. Das hängt irgendwo im Nirwana. Wieso das ?
type
TRealEdit = class(TEdit) 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.Caption := 'CAPTION'; end; destructor TRealEdit.Destroy; begin FLabel.Destroy; inherited; end; |
Zitat:
|
Vielleich überzeugt das hier doch einige Ungläubige, :shock: die nicht sehen, wie wichtig das Thema ist. Das Label kriegt man auch so hin : man leitet statt von TEdit von TLabeledEdit ab. In die USES Liste muß dann noch "ExtCtrls" rein. Mir selber nutzt das aber nichts, da das ganze letzenendes mit einem TDBedit funktionieren muß und ein TDBLabeledEdit gibts nicht.
![]() @Motzi: Hast Du das getestet ? Bei mir steht alles, was mit Parent zu tun hat auf true. |
Zitat:
Füg einfach diese Zeile in deinem constructor dazu:
Delphi-Quellcode:
FLabel := AOwner;
|
Flabel ist doch vom Typ TLabel und Aowner ist TComponent. Wie soll das gehen ? Das meint auch der Compiler. Mittlerweile vermute ich aber auch, daß das an so was liegt. Irgendwie muß ich ja das Label an das Edit dranhängen.
|
Zitat:
Muss natürlich so lauten:
Delphi-Quellcode:
FLabel.Parent := AOwner;
|
soweit war ich auch schon. Dann kommt aber:
inkompatiple Typen : TWinControl und TComponent Das einzige was geht ist :
Code:
So wars ja vorher auch schon. Das Label bleibt verschwunden.
FLabel := TLabel.Create(AOwner);
P.S.: Ich habe mal das TLabeledEdit mit dem hier verglichen, dabei fiel mir auf, daß das im OI fast gleich aussieht. Bei dem Standard-Editlabel steht in der Zeile Editlabel als Wert LabeledEdit1.Sublabel, bei "meinem" steht nichts. |
Zitat:
Am besten wäre es die SetParent-Methode des Edits zu überschreiben um damit auf ein setzen des Parents des Edits reagieren zu können und den Parent des Labels entsprechend zu korrigieren. Ich weiß allerdings nicht, ob die SetParent-Methode als private oder protected deklariert ist und virtual bzw dynamic oder eben static ist... Überschreiben ginge nur wenn sie im protected-Teil und als virtual oder dynamic deklariert ist... Eine andere Möglichkeit (über schön oder unschön lasst sich hier streiten) wäre ein eigenes property Parent einzuführen, womit das original Property Parent verdeckt wird. In diesem Fall hat man dann seine eigenen Get/Set-Methoden über die man Zugriffe steuern kann und kann aber intern über inherited auch auf das Original-Property Parent zurückgreifen... |
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
also ein SetParent scheint es nicht zu geben. Ich habe aber jetzt das Label "gefunden". :mrgreen: Das hängt oben links in der Ecke. Bei Object-Treeview war noch ein <component [1]> drin. Klickt man das an, dann sieht man was. Nee, das wird zu kompliziert zu erklären, ich hänge den Bildschirm hier dran. Will ich das Label da wegziehen, kommt ein Fehler, den hänge ich auch noch dran, vielleicht weiß jemand was damit anzufangen. |
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 01:46 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