Avatar billede vint Nybegynder
28. november 2006 - 21:39 Der er 4 kommentarer og
1 løsning

tusindtalsseperatorerne igen.

Hej igen.

Jeg må indrømme, at det et eller andet sted stadig generer mig, at jeg ikke har evnerne til at få vist tusindtalsseperatorer i mine editbokse (det er mest for syns skyld, men det er nu pænest, når det drejer sig om pengebeløb).

Hvad med jer andre - har i ikke dette problem - eller ser i det ikke som et problem, som jeg gør?

Hvad forslår i evt.?

Jeg har prøvet at arbejde lidt med en freeware currency component, men skal man bruge det indtastede til noget, så giver det problemer, da fx 10.000 ikke er en gyldigt integer-værdi. Havde det været en DBEdit boks, så havde den haft en property der kaldes "displayformat" hvor man fx kan skrive #,### for at få det vist korrekt OG samtidig får det kun indflydelse på det viste og ikke på selve værdien, hvilket er smart. Men jeg synes, at det virker ude i hampen at begynde at indsætte en ClientDataset for at kunne bruge en TTable hvor man kan anvende "dispalyformat" og en DBAware component.

Omvendt er det også ude i hampen at lagre en variabel for hvert af mine editbokse blot for at kunne bruge de indtastede oplysninger uden at være bekymret om "." som generer når tallet skal bruges til beregning.
Avatar billede kroning Nybegynder
28. november 2006 - 22:08 #1
Du laver vel "bare" en ny TEdit komponent der har de egenskaber du ønsker.
Avatar billede kroning Nybegynder
28. november 2006 - 23:47 #2
Jeg laver normalt ikke componenter selv så dette kan helt sikkert forbedres men det virker, hvis jeg har gættet rigtig mht. detaljerne.

Text vil give dig det som du ser i edit boksen mens CurrText vil give dig teksten uden tusindtalsseperator.

------------------------

unit DBExtEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Mask, DBCtrls;

type
  TCurrEdit = class(TEdit)
  private
    { Private declarations }
        function RemoveDots : TCaption;
    function GetCurrText: TCaption;
  protected
    { Protected declarations }
    procedure DoExit; override;
    procedure DoEnter; override;
  public
    { Public declarations }
  published
    { Published declarations }
        property CurrText: TCaption read GetCurrText;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MineEditComp', [TCurrEdit]);
end;

function TCurrEdit.RemoveDots : TCaption;
begin
    Result:=Text;
    while pos('.',Result)>0 do
      Delete(Result,pos('.',Result),1);
end;

procedure TCurrEdit.DoExit;
begin
    Text:=RemoveDots;
    Text:=FormatFloat('#,##0.00',StrToFloatDef(Text,0));
  inherited;
end;

procedure TCurrEdit.DoEnter;
begin
    Text:=RemoveDots;
    Text:=FormatFloat('0.00',StrToFloatDef(Text,0));
  if AutoSelect then
      SelectAll;
  inherited;
end;

function TCurrEdit.GetCurrText: TCaption;
begin
    Result:=FormatFloat('0.00',StrToFloatDef(RemoveDots,0));
end;

end.
Avatar billede hrc Mester
29. november 2006 - 10:17 #3
Hvad med denne her:
  Edit.Text := CurrToStrF(FloatToCurr(123912873),ffNumber,2);

Bruger du ffCurrency så skriver den "kr." foran tallet
Avatar billede vint Nybegynder
29. november 2006 - 19:48 #4
Hej Kroning.

Mit svar til din første kommentar: Tja, det er vel ens kunnen og formåen, der sætter grænserne og her er det, at evnerne for mit vedkommende sagde fra. Og heldigvis er man jo ikke forpligtet udover sine egne evner ;o)

Derfor siger jeg mange tak til dig. Udover at du i kommentar 2 har vist en på papiret (jeg har nemlig ikke prøvet det endnu) fremragende løsning, så har du også vist mig, hvordan et komponent mere eller mindre kan skrives. Det har været et lærerigt indlæg, som jeg gerne vil give mine points til.
Avatar billede kroning Nybegynder
29. november 2006 - 22:17 #5
Så får du et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester