Advertisement
jpfassis

MyEdit Delphi

Jun 13th, 2019
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 8.47 KB | None | 0 0
  1. unit UnitMyNewEdit;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, Classes, Windows, Controls, MaskUtils, Forms, StdCtrls, ExtCtrls, Graphics,
  7.   Dialogs, Messages;
  8.  
  9. type
  10.   TMyNewEdit = class(TPanel)
  11.   private
  12.     { Private declarations }
  13.     MyEdit : TEdit;
  14.     Shape_Base: TShape;
  15.     Shape_Lateral: TShape;
  16.     Label_Texto: TLabel;
  17.     FTextLabel: string;
  18.     FTextLabelColor: TColor;
  19.     FTextEdit : string;
  20.     FMostraShapeLateral : boolean;
  21.     FPassWord : boolean;
  22.     FZeros : integer;
  23.     FZeroEsquerda : boolean;
  24.     FCurrency : boolean;
  25.     FMask : string;
  26.     Texto1, Texto2 : string;
  27.     procedure SetTextMyEdit(const Value: string);
  28.     procedure SetTextLabel(const Value: string);
  29.     procedure SetTextLabelColor(const Value: TColor);
  30.     procedure SetMostraShapeLateral(const Value: boolean);
  31.     procedure SetFPassWord(const Value: boolean);
  32.     procedure SetFMask(const Value: String);
  33.     procedure SetFCurrency(const Value: boolean);
  34.     procedure SetFZeroEsquerda(const Value: boolean);
  35.     procedure SetFZeros(const Value: integer);
  36.     function GetTextMyEdit : string;
  37.     procedure KeyPressMyEdit (Sender: TObject; var Key: Char);
  38.     procedure ChangeMyEdit (Sender: TObject);
  39.     procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
  40.     procedure CMExit(var Message: TCMExit); message CM_EXIT;
  41.     function Mascara(edt: String; mask: string) : string;
  42.     function PreencheZero(const aNumber, Length : integer) : string;
  43.     function TiraPontos(texto : String) : string;
  44.   protected
  45.     procedure CreateWnd; override;
  46.     { Protected declarations }
  47.   public
  48.     { Public declarations }
  49.     constructor Create(AOwner: TComponent); override;
  50.   published
  51.     { Published declarations }
  52.     property  TextEdit : string read GetTextMyEdit write SetTextMyEdit;
  53.     property  TextLabel : string read FTextLabel write SetTextLabel;
  54.     property  TextLabelColor : TColor read FTextLabelColor write SetTextLabelColor;
  55.     property  LinhaVertical : boolean read FMostraShapeLateral write SetMostraShapeLateral;
  56.     property  Password : boolean read FPassWord write SetFPassWord;
  57.     property  TextMask : string read FMask write SetFMask;
  58.     property  Currency : boolean read FCurrency write SetFCurrency;
  59.     property  Zeros : integer read FZeros write SetFZeros;
  60.     property  ZeroEsquerda : boolean read FZeroEsquerda write SetFZeroEsquerda;
  61.  
  62.   end;
  63.  
  64. procedure Register;
  65.  
  66. implementation
  67.  
  68. procedure Register;
  69. begin
  70.   RegisterComponents('My Componentes', [TMyNewEdit]);
  71. end;
  72.  
  73. { TMyNewEdit }
  74.  
  75. constructor TMyNewEdit.Create(AOwner: Tcomponent);
  76. begin
  77.   inherited Create(AOwner);
  78.  
  79.   Label_Texto := TLabel.Create(Self);
  80.   Label_Texto.Parent:= self;
  81.   Label_Texto.Left:=0;
  82.   Label_Texto.Top:=1;
  83.   Label_Texto.Caption:='Texto Teste';
  84.   Label_Texto.Font.Name:='Segoe UI';
  85.   Label_Texto.Font.Color:=clBlue;
  86.  
  87.   MyEdit := TEdit.Create(Self);
  88.   MyEdit.Parent:= self;
  89.   MyEdit.Left:=2;
  90.   MyEdit.Top:=15;
  91.   MyEdit.Width:=176; //-4 da linha de base
  92.   MyEdit.Height:=26;
  93.   MyEdit.BorderStyle:=bsnone;
  94.   MyEdit.ParentColor:=True;
  95.   MyEdit.Font.Size:=12;
  96.   MyEdit.Font.Name:='Segoe UI';
  97.   MyEdit.Anchors:=[akleft, akright, aktop];
  98.   MyEdit.OnChange:=ChangeMyEdit;
  99.   MyEdit.OnKeyPress:=KeyPressMyEdit;
  100.  
  101.   Shape_Lateral := TShape.Create(Self);
  102.   Shape_Lateral.Parent:= self;
  103.   Shape_Lateral.Left:=0;
  104.   Shape_Lateral.Top:=MyEdit.Top;
  105.   Shape_Lateral.Width:=2;
  106.   Shape_Lateral.Height:=MyEdit.Height+2;
  107.   Shape_Lateral.Brush.Color:=clBlue;
  108.   Shape_Lateral.Pen.Style:=psClear;
  109.  
  110.   Shape_Base := TShape.Create(Self);
  111.   Shape_Base.Parent:= self;
  112.   Shape_Base.Left:=1;
  113.   Shape_Base.Top:=(Label_Texto.Height+MyEdit.Height)+2;
  114.   Shape_Base.Width:=180;
  115.   Shape_Base.Height:=2;
  116.   Shape_Base.Brush.Color:=clBlue;
  117.   Shape_Base.Pen.Style:= psclear;
  118.   Shape_Base.Anchors:=[akleft, akright, aktop];
  119.  
  120. end;
  121.  
  122.  
  123. procedure TMyNewEdit.CreateWnd;
  124. begin
  125.   inherited;
  126.    self.Caption:='';
  127.    self.BevelOuter:=bvNone;
  128.    self.ParentColor:=True;
  129.    self.Height:=(Label_Texto.Height+MyEdit.Height)+3;
  130. end;
  131.  
  132.  
  133. procedure TMyNewEdit.CMEnter(var Message: TCMEnter);
  134. begin
  135.  
  136. end;
  137.  
  138. procedure TMyNewEdit.CMExit(var Message: TCMExit);
  139. begin
  140.  
  141.     if FZeroEsquerda then
  142.     begin
  143.  
  144.       if not (FTextEdit = '') then
  145.       begin
  146.         MyEdit.Text:=PreencheZero(strtoint(FTextEdit), 10) ;
  147.       end;
  148.  
  149.     end;
  150.  
  151. end;
  152.  
  153.  
  154. function TMyNewEdit.GetTextMyEdit : string;
  155. begin
  156.   Result := FTextEdit;
  157. end;
  158.  
  159. procedure TMyNewEdit.ChangeMyEdit(Sender: TObject);
  160. begin
  161.   FTextLabel := inttostr(MyEdit.SelStart);
  162.   Label_Texto.Caption:= FTextLabel;
  163. end;
  164.  
  165. procedure TMyNewEdit.KeyPressMyEdit(Sender: TObject; var Key: Char);
  166. var
  167. posicao : integer;
  168. begin
  169.  
  170.  
  171.   if not (Length(MyEdit.Text)>0) then
  172.   begin
  173.     Texto1:='';
  174.     Texto2:='';
  175.     MyEdit.Text:='';
  176.   end;
  177.  
  178.  
  179.   if FCurrency then
  180.   begin
  181.     if not (Key in [#8, #13, '0'..'9', '-', DecimalSeparator]) then
  182.     begin
  183.     //ShowMessage('Invalid key: ' + Key);
  184.     Key := #0;
  185.     end
  186.     else if ((Key = DecimalSeparator) or (Key = '-')) and
  187.     (Pos(Key, (Sender as TEdit).Text) > 0)
  188.     then begin
  189.     //ShowMessage('Invalid Key: twice ' + Key);
  190.     Key := #0;
  191.     end
  192.     else if (Key = '-') and
  193.     ((Sender as TEdit).SelStart <> 0) then
  194.     begin
  195.     //ShowMessage('Only allowed at beginning of number: ' + Key);
  196.     Key := #0;
  197.     end;
  198.   end;
  199.  
  200. if FMask <> ''  then
  201. begin
  202.  
  203.   if (key = chr(VK_BACK)) then
  204.   begin
  205.     posicao := MyEdit.SelStart;
  206.     texto2:=texto1;
  207.     delete(Texto2, Posicao,1);
  208.     texto1:=texto2;
  209.   end;
  210.  
  211.   if (key = chr(VK_DELETE)) then
  212.   begin
  213.     posicao := MyEdit.SelStart;
  214.     texto2:=texto1;
  215.     delete(Texto2, Posicao,1);
  216.     texto1:=texto2;
  217.   end;
  218.  
  219.   if not ( (key = chr(VK_BACK))  or (key = chr(VK_DELETE)) ) then
  220.   begin
  221.  
  222.     if   (MyEdit.SelLength < MyEdit.MaxLength) then
  223.     begin
  224.  
  225.       posicao := MyEdit.SelStart;
  226.       texto2:=texto1;
  227.       insert(key, texto2, posicao);
  228.       texto1:=texto2;
  229.  
  230.       MyEdit.Text := Mascara(texto1, FMask);
  231.  
  232.         if (posicao=MyEdit.SelLength) then
  233.         begin
  234.           MyEdit.SelStart :=  posicao+1;
  235.         end
  236.         else
  237.         begin
  238.           MyEdit.SelStart :=  MyEdit.SelLength;
  239.         end;
  240.  
  241.     end
  242.     else
  243.     begin
  244.       Key := #0;
  245.       //fazer ir para proximo controle
  246.     end;
  247.  
  248.   end;
  249.  
  250. end;
  251.  
  252. end;
  253.  
  254.  
  255. function TMyNewEdit.Mascara(edt : string; mask: string): string;
  256. var
  257. ipos : integer;
  258. begin
  259.  
  260.   if (FMask <> '')  then
  261.   begin
  262.     MyEdit.MaxLength:=Length(FMask);
  263.   end;
  264.  
  265.  
  266.   for ipos := 1 to Length(edt) do
  267.   begin
  268.  
  269.     if (mask[ipos] = '9') and  not (edt[ipos] in ['0'..'9'])  and
  270.      (Length(edt)=Length(mask)+1)  then
  271.      delete(edt,ipos,1);
  272.  
  273.     if (mask[ipos] <> '9') and (edt[ipos] in ['0'..'9']) then
  274.      insert(mask[ipos],edt, ipos);
  275.  
  276.   end;
  277.  
  278.   result := edt;
  279.  
  280. end;
  281.  
  282. function TMyNewEdit.PreencheZero(const aNumber, Length : integer) : string;
  283. begin
  284.  result := Format('%.*d', [Length, aNumber]) ;
  285. end;
  286.  
  287. procedure TMyNewEdit.SetTextMyEdit(const Value: string);
  288. begin
  289.   FTextEdit:=Value;
  290. end;
  291.  
  292.  
  293. function TMyNewEdit.TiraPontos(texto: String): String;
  294. const
  295.   InvalidChars : set of char = ['-','.','/',',','(',')',' '];
  296. var
  297.   i : integer;
  298. begin
  299.   Result:='';
  300.     for i:=1 to Length(Texto) do
  301.       if not (Texto[i] in InvalidChars) then
  302.       Result:=Result+Texto[i]
  303. end;
  304.  
  305.  
  306. procedure TMyNewEdit.SetFCurrency(const Value: boolean);
  307. begin
  308.   FCurrency := Value;
  309.   if FCurrency then
  310.   begin
  311.     FMask :='';
  312.     MyEdit.Alignment:=taRightJustify;
  313.   end;
  314. end;
  315.  
  316. procedure TMyNewEdit.SetFMask(const Value: String);
  317. begin
  318.   FMask := Value;
  319.   if (FMask <> '')  then
  320.   begin
  321.     MyEdit.MaxLength:=Length(FMask);
  322.   end;
  323. end;
  324.  
  325. procedure TMyNewEdit.SetFPassWord(const Value: boolean);
  326. begin
  327.   FPassWord := Value;
  328.   if FPassWord then
  329.   begin
  330.     MyEdit.PasswordChar:='*';
  331.   end
  332.   else
  333.   begin
  334.     MyEdit.PasswordChar:=#0;
  335.  end;
  336. end;
  337.  
  338. procedure TMyNewEdit.SetFZeroEsquerda(const Value: boolean);
  339. begin
  340.   FZeroEsquerda := Value;
  341. end;
  342.  
  343. procedure TMyNewEdit.SetFZeros(const Value: integer);
  344. begin
  345.   FZeros := Value;
  346. end;
  347.  
  348. procedure TMyNewEdit.SetMostraShapeLateral(const Value: boolean);
  349. begin
  350.   FMostraShapeLateral := Value;
  351.   Shape_Lateral.Visible:=FMostraShapeLateral;
  352. end;
  353.  
  354. procedure TMyNewEdit.SetTextLabel(const Value: string);
  355. begin
  356.   FTextLabel := Value;
  357.   Label_Texto.Caption:= FTextLabel;
  358. end;
  359.  
  360. procedure TMyNewEdit.SetTextLabelColor(const Value: TColor);
  361. begin
  362.   FTextLabelColor := Value;
  363.   Label_Texto.Font.Color := FTextLabelColor;
  364. end;
  365.  
  366. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement