AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Blank im Edit-Control für Integer/Float-Werte

Ein Thema von Abrand · begonnen am 16. Jan 2006 · letzter Beitrag vom 16. Jan 2006
Antwort Antwort
Abrand

Registriert seit: 16. Jan 2006
Ort: Bayern
9 Beiträge
 
Delphi 6 Enterprise
 
#1

Blank im Edit-Control für Integer/Float-Werte

  Alt 16. Jan 2006, 13:34
Hallo,

das ist meine erste Frage hier...

Ich schaffe es nicht in Edit-Controls ein Blank (nicht 0) für
Integer- oder Float-Werte einzugeben bzw. anzuzeigen.
Zusätzlich soll der Wert auch noch formatiert sein (Tausenderpunkt und
Dezimalstellen, maximale Länge).

Ich habe schom mit RxCalcEdit und JvCalcEdit herumexperimentiert,
aber ich schaffe nur korrekte Formatierungen. Ein Blank kann ich immer
nicht anzeigen bzw. eingeben.

Kann mir jemand helfen?
Alex
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Blank im Edit-Control für Integer/Float-Werte

  Alt 16. Jan 2006, 14:04
Hallo, willkommen in der Delphi-Praxis!


was meinst du mit Blank? Ein Leerzeichen? Wo liegt denn dann das Problem?

wenn du eine Edit-Komponente mit Sonderfunktionen schreiben willst, kannst du dich an diesem Code orientieren (Edit zum Eingeben eines Geldbetrags):

Delphi-Quellcode:
unit MyMoneyEdit;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TMoneyEdit = class(TEdit)
  private
    { Private-Deklarationen }
    reactonc:boolean;
  protected
    { Protected-Deklarationen }
    procedure setmoney(money:real);
    function getmoney:real;
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    procedure keypress(var key:char); override;
    property money:real read getmoney write setmoney;
    procedure change; override;
    constructor create(aOwner:tcomponent); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TMoneyEdit]);
end;

constructor tmoneyedit.create(aOwner:tcomponent);
begin
  inherited create(aOwner);
  reactonc:=true;
end;

procedure tmoneyedit.setmoney(money:real);
begin
  if not (((text='') or (text='-')) and (money=0)) then
    self.text:=floattostr(money);
end;

function tmoneyedit.getmoney:real;
begin
  if (text='') or (text='-') then
    result:=0
  else
    try
      result:=strtofloat(text);
    except
      result:=0;
      text:='';
    end;
end;

procedure tmoneyedit.Change;
var
  curpos,i,commavalues:integer;
  commaexists:boolean;
  s:string;
begin
  if not reactonc then
    exit;
  reactonc:=false;
  curpos:=self.GetSelStart;
  if not((text='') or (text='-') or (text[length(text)]=',')) then
  begin
    commaexists:=false;
    commavalues:=0;
    for i:=1 to length(text) do
    begin
      if commaexists then
        inc(commavalues);
      if commavalues>2 then
      begin
        s:=text;
        delete(s,i,length(text));
        text:=s;
        break;
      end;
      if text[i]=',then
      begin
        if commaexists then
        begin
          s:=text;
          delete(s,i,length(text));
          text:=s;
          break;
        end;
        commaexists:=true;
      end;
    end;
  end;
  setselstart(curpos);
  reactonc:=true;
  inherited change;
end;

procedure tmoneyedit.KeyPress(var key:char);
begin
  if Key = '.then Key := ',';
  If not (Key in [#43..#45, #48..#57, #8, #13]) then
    Key := #0;
  If (Pos(',', Text) <> 0) then
    if Key = ',then
      Key := #0;
  inherited keypress(key);
end;

end.
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Abrand

Registriert seit: 16. Jan 2006
Ort: Bayern
9 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Blank im Edit-Control für Integer/Float-Werte

  Alt 16. Jan 2006, 14:16
Mit Blank meine ich ein Leerzeichen.

Ich schaffe bei den mir bekannten Controls immer nur eine
vernünftige Formatierung aber nie die Eingabe/Anzeige
eines Leerzeichens, wenn kein Wert vorhanden ist.
Ich muss unterscheiden zwischen 0 und Leerzeichen.

Die Eigenschaften wie
DisplayFormat:='0.00'
oder
ZeroIsEmpty:=True
oder
MaskEdit:='0.00'
helfen mir da nicht weiter.
Alex
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Blank im Edit-Control für Integer/Float-Werte

  Alt 16. Jan 2006, 15:16
Hallo Alex,

die Geschichte mit dem Leerzeichen ist mysteriös. Mir scheint, du suchst nach einer Möglichkeit die Eingabe von Festkommazahlen sicher zu gestalten, wobei eine Eingabe auch ganz unterbleiben kann. Da gibt es mehrere Strategien:
  • Unbeschränkte Eingabe und spätere Prüfung
  • Unbeschränkte Eingabe und visuelle Rückmeldung
  • Eingabebeschränkung
Der erste Ansatz gefällt wohl niemandem so recht. Michael hat den letzten Fall aufgegriffen, wenn auch anders als du mit der Edit-Maske. Ich erwärme mich mehr für den zweiten Fall, der quasi einen Kompromiss darstellt. Wenn du magst ziehe eine TEdit-Komponente auf eine Form und trage in den Ereignissen OnChange(), OnEnter() und OnExit() die folgenden Code-Zeilen ein um zu sehen was ich meine:

Delphi-Quellcode:
procedure TDemoForm.EditChange(Sender: TObject);
var
  fTest: Extended;
begin
  with Sender as TEdit do
  if Focused then
  begin
    if (Text = '') or TryStrToFloat(Text, fTest) then
    begin
      Color := clWhite;
      Font.Color := clBlack;
    end else
    begin
      Color := clRed;
      Font.Color := clWhite;
    end;
  end;
end;

procedure TDemoForm.EditExit(Sender: TObject);
begin
  with Sender as TEdit do
    Text := Format('%.2n', [StrToFloat(Text)]);
end;

procedure TDemoForm.EditEnter(Sender: TObject);
begin
  with Sender as TEdit do
  begin
    Text := StringReplace(Text, ThousandSeparator, '', []);
    SelectAll;
  end;
end;
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Abrand

Registriert seit: 16. Jan 2006
Ort: Bayern
9 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Blank im Edit-Control für Integer/Float-Werte

  Alt 16. Jan 2006, 16:06
Hallo marabu,

vielen Dank für deine Antwort, du hast mein Problem richtig erkannt.
Ich habe es gleich ausprobiert und es hat funktioniert bis auf
das Problem, dass ich kein Leerzeichen ohne Fehlermeldung eingeben konnte.

Dazu musste ich die Exit-Routine noch erweitern:

Delphi-Quellcode:

procedure TDemoForm.EditExit(Sender: TObject);
var
  fTest: Extended;
begin
  with Sender as TEdit do
  begin
    if (trim(text)<>'')
    then
    begin
      if (TryStrToFloat(Text, fTest))
      then Text := Format('%.2n', [StrToFloat(Text)])
      else ActiveControl:=TEdit(sender);
    end;
  end;
end;
Vielen Dank
Alex
Alex
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 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