Advertisement
jpfassis

MyComboBox Unit Delphi

Jan 20th, 2020
793
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.71 KB | None | 0 0
  1. unit UMyComboBox;
  2.  
  3. interface
  4.  
  5. uses
  6. SysUtils, Classes, Controls, StdCtrls, Buttons, Forms,
  7. Graphics, Dialogs, ExtCtrls, Windows, Grids;
  8.  
  9. type
  10.  
  11. TMyComboBox = class(TCustomControl)
  12.   private
  13.    MyEditCombo : TEdit;
  14.    MyButtomCombo : TSpeedButton;
  15.    MyEditPesquisar : TEdit;
  16.    MyFrame : TFrame;
  17.    MyPanel : TPanel;
  18.    MyShape : TShape;
  19.    MyStringGrid : TStringGrid;
  20.    FPanelColor : TColor;
  21.    FCampos : TStringList;
  22.    procedure AbrirBox(Sender: TObject);
  23.    procedure Pesquisar(Sender: TObject);
  24.    procedure Selecionar(Sender: TObject);
  25.    procedure KeyPress(Sender: TObject; var Key: Char);
  26.    procedure SetPanelColor(const Value: TColor);
  27.    procedure SetCampos(const Value: TStringList);
  28.    procedure ConfigurarStringGrid;
  29.   protected
  30.     procedure CreateWnd; override;
  31.   public
  32.     constructor Create(aOwner : TComponent); override;
  33.     destructor Destroy; override;
  34.   published
  35.     property PanelColor : TColor read FPanelColor write SetPanelColor;
  36.     property Campos : TStringList read FCampos write SetCampos;
  37.  
  38. end;
  39.  
  40. procedure register;
  41.  
  42. implementation
  43.  
  44. procedure register;
  45. begin
  46.   registercomponents('My Componentes', [TMyComboBox]);
  47. end;
  48.  
  49.  
  50. { TMyComboBox }
  51.  
  52. constructor TMyComboBox.Create(aOwner: TComponent);
  53. begin
  54.   inherited Create(AOwner);
  55.   self.Width:=200;
  56.   self.Height:=21;
  57.   self.ParentColor:=True;
  58.  
  59.  
  60.   MyEditCombo:=TEdit.Create(self);
  61.   MyEditCombo.Parent:=Self;
  62.   MyEditCombo.Width:=180;
  63.   MyEditCombo.Anchors:=[akLeft,akRight,akTop, akBottom];
  64.  
  65.   MyButtomCombo := TSpeedButton.Create(self);
  66.   MyButtomCombo.Parent:=self;
  67.   MyButtomCombo.Width:=20;
  68.   MyButtomCombo.Height:=MyEditCombo.Height+4;
  69.   MyButtomCombo.Top:=MyEditCombo.Top-1;
  70.   MyButtomCombo.Left:=MyEditCombo.Width+1;
  71.   MyButtomCombo.Anchors:=[akRight,akTop, akBottom];
  72.   MyButtomCombo.OnClick:=AbrirBox;
  73.  
  74.   FCampos := TStringList.Create;
  75.  
  76. end;
  77.  
  78. procedure TMyComboBox.CreateWnd;
  79. begin
  80.   inherited CreateWnd;
  81.  
  82. end;
  83.  
  84. procedure TMyComboBox.AbrirBox(Sender: TObject);
  85. begin
  86.  
  87. if assigned(MyFrame) then
  88.   if  MyFrame.Visible=True then
  89.   begin
  90.       MyFrame.Visible:=False;
  91.       exit;
  92.   end;
  93.  
  94.    MyFrame := TFrame.Create(nil);
  95.    MyFrame.Parent:= Parent;
  96.    MyFrame.Name:= 'CustomFrame';
  97.    MyFrame.Width:=400;
  98.    MyFrame.Height:=250;
  99.    MyFrame.Top:=self.Top+self.Height;
  100.    MyFrame.Left:=self.Left;
  101.    MyFrame.Visible:=True;
  102.  
  103.    MyPanel := TPanel.Create(nil);
  104.    MyPanel.Parent:= MyFrame;
  105.    MyPanel.Name:= 'CustomPanel';
  106.    MyPanel.Caption:= 'Nenhum Registro Encontrado !';
  107.    MyPanel.Align:= alClient;
  108.    MyPanel.ParentBackground:= False;
  109.    MyPanel.Color:= clYellow;
  110.    MyPanel.Visible:= True;
  111.  
  112.    MyStringGrid := TStringGrid.Create(nil);
  113.    MyStringGrid.Parent := MyPanel;
  114.    MyStringGrid.Name := 'CustomStringGrid';
  115.    MyStringGrid.Align:= alTop;
  116.    MyStringGrid.Height:= 200;
  117.    MyStringGrid.BorderStyle:= bsNone;
  118.    MyStringGrid.OnDblClick:=Selecionar;
  119.  
  120.    ConfigurarStringGrid;
  121.  
  122.    MyShape := TShape.Create(nil);
  123.    MyShape.Parent := MyPanel;
  124.    MyShape.Name := 'CustomShape';
  125.    MyShape.Align:= alTop;
  126.    MyShape.Height:= 2;
  127.  
  128.    MyEditPesquisar := TEdit.Create(nil);
  129.    MyEditPesquisar.Parent := MyPanel;
  130.    MyEditPesquisar.Name := 'CustomEdit';
  131.    MyEditPesquisar.Text := 'Pesquisar';
  132.    MyEditPesquisar.Align:= alTop;
  133.    MyEditPesquisar.Font.Name:= 'Segoe UI';
  134.    MyEditPesquisar.Font.Size:= 11;
  135.    MyEditPesquisar.OnChange:=Pesquisar;
  136.    MyEditPesquisar.OnKeyPress:=KeyPress;
  137.  
  138.    MyEditPesquisar.BorderStyle:=bsNone;
  139.    MyEditPesquisar.SetFocus;
  140.  
  141. end;
  142.  
  143. destructor TMyComboBox.Destroy;
  144. begin
  145.  
  146.   inherited;
  147. end;
  148.  
  149.  
  150. procedure TMyComboBox.KeyPress(Sender: TObject; var Key: Char);
  151. begin
  152. if (key = #27) then
  153. begin
  154.    MyFrame.Visible:=False;
  155.    MyEditCombo.SetFocus;
  156. end;
  157.  
  158. end;
  159.  
  160. procedure TMyComboBox.Pesquisar(Sender: TObject);
  161. begin
  162.   if (MyEditPesquisar.Text = '') then
  163.   begin
  164.    MyStringGrid.Visible:=false;
  165.   end
  166.   else
  167.   begin
  168.    MyStringGrid.Visible:=True;
  169.   end;
  170. end;
  171.  
  172. procedure TMyComboBox.Selecionar(Sender: TObject);
  173. begin
  174.    MyFrame.Visible:=False;
  175.    MyEditCombo.SetFocus;
  176. end;
  177.  
  178. procedure TMyComboBox.SetCampos(const Value: TStringList);
  179. begin
  180.   FCampos := Value;
  181. end;
  182.  
  183. procedure TMyComboBox.SetPanelColor(const Value: TColor);
  184. begin
  185.   FPanelColor := Value;
  186. end;
  187.  
  188.  
  189. procedure TMyComboBox.ConfigurarStringGrid;
  190. var
  191. i : integer;
  192. begin
  193.  
  194. { Primeira linha para o título e a segunda linha em branco }
  195.   MyStringGrid.RowCount := 2;
  196.  
  197. { Cria Colunas Conforme Quantidade de Itens em FCampos }
  198.   MyStringGrid.ColCount:=FCampos.Count;
  199.  
  200. { Preencher o titulo de cada coluna com os dados de FCampos }
  201. if  FCampos.Count<>0  then
  202. begin
  203.   for i := 0 to FCampos.Count - 1 do
  204.   MyStringGrid.Cells[i, 0] := FCampos[i];
  205. end;
  206.  
  207.  
  208. end;
  209.  
  210.  
  211. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement