Difference between revisions of "Lazarus Hacks"

From Lazarus wiki
Jump to navigationJump to search
Line 5: Line 5:
 
In some applications we need constantly convert TCustomEdit descendants Text property for or to numeric values:
 
In some applications we need constantly convert TCustomEdit descendants Text property for or to numeric values:
  
 +
<code>
 
   TCustomEditFilters = (cefNone, cefInteger, cefUnsigned, cefCurrency, cefFloat);
 
   TCustomEditFilters = (cefNone, cefInteger, cefUnsigned, cefCurrency, cefFloat);
  
Line 77: Line 78:
 
   function TCustomEdit.GetAsFloat:Extended;
 
   function TCustomEdit.GetAsFloat:Extended;
 
   begin
 
   begin
     if Text = &lsquo;&lsquo; then result := 0
+
     if Text = '' then result := 0
 
     else if not TryStrToFloat(Text, result) then
 
     else if not TryStrToFloat(Text, result) then
 
       Raise Exception.Create(rsInvalidNumbe);
 
       Raise Exception.Create(rsInvalidNumbe);
Line 89: Line 90:
 
   function TCustomEdit.GetAsCurrency:Currency;
 
   function TCustomEdit.GetAsCurrency:Currency;
 
   begin
 
   begin
     if Text = &lsquo;&lsquo; then result := 0
+
     if Text = '' then result := 0
 
     else if not TryStrToCurr(Text, result) then
 
     else if not TryStrToCurr(Text, result) then
 
       raise Exception.Create(rsInvalidNumbe);
 
       raise Exception.Create(rsInvalidNumbe);
Line 98: Line 99:
 
     Text := CurrToStr(aVal);
 
     Text := CurrToStr(aVal);
 
   end;
 
   end;
 +
</code>

Revision as of 18:26, 27 October 2009

Add here your hacks modifications to Lazarus IDE or LCL widgets, even if they are not officially accepted maybe if a good idea arise and is good enough it can be part of the official distribution, if not it can be used by other people that need more handy functionality than standards.

Exposing/Extending TCustomEdit

In some applications we need constantly convert TCustomEdit descendants Text property for or to numeric values:

 TCustomEditFilters = (cefNone, cefInteger, cefUnsigned, cefCurrency, cefFloat);
 { TCustomEdit }
 TCustomEdit = class(TWinControl)
 private
   ...
   FTmpModified : Boolean;
   FceFilter : TCustomEditFilters;
   procedure SetceFilter(aCeFilter: TCustomEditFilters);
   function GetAsInteger:Integer;
   procedure SetAsInteger(aVal: Integer);
   function GetAsFloat:Extended;
   procedure SetAsFloat(aVal: Extended);
   function GetAsCurrency:Currency;
   procedure SetAsCurrency(aVal: Currency);
 public
   ...
   property TmpModified: Boolean read FTmpModified write FTmpModified;
   property AsInteger: Integer read getAsInteger write setAsInteger;
   property AsFloat: Extended read getAsFloat write setAsFloat;
   property AsCurrency: Currency read getAsCurrency write setAsCurrency;
 published
   property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
   property ceFilter : TCustomEditFilters read FceFilter write SetceFilter default cefNone;
 end;

On the implementation part tcustomedit.inc:

 resourcestring
   rsInvalidNumbe = 'Invalid number !';
 procedure TCustomEdit.Change;
 begin
   FTmpModified := True;
   if Assigned(FOnChange) then FOnChange(Self);
 end;
 procedure TCustomEdit.DoExit;
 begin
   if FCeFilter <> cefNone then
   begin
     case FCeFilter of
       cefInteger, cefUnsigned: AsInteger;
       cefFloat: AsFloat;
       cefCurrency: AsCurrency;
     end;
   end;
   FAutoSelected := False;
   inherited DoExit;
 end;
 procedure TCustomEdit.SetceFilter(aCeFilter: TCustomEditFilters);
 begin
   FCeFilter := aCeFilter;
   if FCeFilter = cefNone then Alignment := taLeftJustify
   else Alignment := taRightJustify;
 end;
 function TCustomEdit.GetAsInteger:Integer;
 begin
   TryStrToInt(Text, result);
 end;
 procedure TCustomEdit.SetAsInteger(aVal: Integer);
 begin
    Text := IntToStr(aVal);
 end;
 function TCustomEdit.GetAsFloat:Extended;
 begin
   if Text =  then result := 0
   else if not TryStrToFloat(Text, result) then
     Raise Exception.Create(rsInvalidNumbe);
 end;
 procedure TCustomEdit.SetAsFloat(aVal: Extended);
 begin
    Text := FloatToStr(aVal);
 end;
 function TCustomEdit.GetAsCurrency:Currency;
 begin
   if Text =  then result := 0
   else if not TryStrToCurr(Text, result) then
     raise Exception.Create(rsInvalidNumbe);
 end;
 procedure TCustomEdit.SetAsCurrency(aVal: Currency);
 begin
    Text := CurrToStr(aVal);
 end;