Botão dentro de um Edit
Já vi algumas aplicações que dentro do Edit tem um botão. geralmente com um ícone de pesquisar.
Acho que devem ser provavelmente algum componente de terceiro.
mas como faço para colocar um botão dentro do Edit sem utilizar componentes de terceiro?
Acho que devem ser provavelmente algum componente de terceiro.
mas como faço para colocar um botão dentro do Edit sem utilizar componentes de terceiro?
Raserafim
Curtidas 0
Respostas
Raserafim
11/01/2006
consegui colocar o botão dentro caso eu crie dinamicamente um botão e coloque como Paret o Edit que quero.
mas quando clico no edit, o botão é deslocado para baixo.
mas quando clico no edit, o botão é deslocado para baixo.
GOSTEI 0
Godzilla_xf
11/01/2006
Olá, bem gostaria de saber se vc resoveu o seu problema, pois estou com o mesmo problema e naum consigo achar a solução. Caso vc tenha resolvido poderia me postar uma pequena ajuda, de como fez???
obrigado. té +++
obrigado. té +++
GOSTEI 0
Raserafim
11/01/2006
não achei nenhuma solução.
desisti MOMENTANEAMENTE, de fazer isto, mas sei que em algum momento vou voltar a precisar.
agora faço o inverso. se vc achar alguma solução, poste aqui que vai me ajudar muito, e tenho certeza que várias amigos aqui do forum
desisti MOMENTANEAMENTE, de fazer isto, mas sei que em algum momento vou voltar a precisar.
agora faço o inverso. se vc achar alguma solução, poste aqui que vai me ajudar muito, e tenho certeza que várias amigos aqui do forum
GOSTEI 0
Macario
11/01/2006
Olá.
Existe componente com esta caracteristica na RxLib.
Agora caso queira voce mesmo fazer seu componente de ´terceiros´ indico que olhe a implementação nas units da RxLib, assim terá como resolver seu impasse.
[]´s 8)
Existe componente com esta caracteristica na RxLib.
Agora caso queira voce mesmo fazer seu componente de ´terceiros´ indico que olhe a implementação nas units da RxLib, assim terá como resolver seu impasse.
[]´s 8)
GOSTEI 0
Godzilla_xf
11/01/2006
não achei nenhuma solução.
desisti MOMENTANEAMENTE, de fazer isto, mas sei que em algum momento vou voltar a precisar.
agora faço o inverso. se vc achar alguma solução, poste aqui que vai me ajudar muito, e tenho certeza que várias amigos aqui do forum
Não achei mais a pagina que baixei entaum ta aqui o codigo, rsrs, espero que te ajude, té +++
unit uEditButton; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask, Buttons,ExtCtrls; type TEditBtn = class(TEdit) private FButton: TSpeedButton; FEditorEnabled: Boolean; FOnBtnClick : TNotifyEvent; procedure SetGlyph(Pic: TBitmap); function GetGlyph : TBitmap; procedure SetNumGlyphs(ANumber: Integer); function GetNumGlyphs:Integer; function GetMinHeight: Integer; procedure SetEditRect; procedure WMSize(var Message: TWMSize); message WM_SIZE; procedure CMEnter(var Message: TCMGotFocus); message CM_ENTER; procedure CMExit(var Message: TCMExit); message CM_EXIT; procedure WMPaste(var Message: TWMPaste); message WM_PASTE; procedure WMCut(var Message: TWMCut); message WM_CUT; protected procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override; function IsValidChar(Key: Char): Boolean; virtual; procedure aClick (Sender: TObject); virtual; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyPress(var Key: Char); override; procedure CreateParams(var Params: TCreateParams); override; procedure CreateWnd; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Button: TSpeedButton read FButton; published property AutoSelect; property AutoSize; property Color; property Ctl3D; property DragCursor; property DragMode; property EditorEnabled: Boolean read FEditorEnabled write FEditorEnabled default True; property Enabled; property Font; property Glyph : TBitmap read GetGlyph write SetGlyph; property NumGlyphs : Integer read GetNumGlyphs write SetNumGlyphs; property MaxLength; property ParentColor; property ParentCtl3D; property ParentFont; property ParentShowHint; property PopupMenu; property ReadOnly; property ShowHint; property TabOrder; property TabStop; property Visible; property OnChange; property OnClick; property OnBtnClick : TNotifyEvent read FOnBtnClick write FOnBtnClick; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDrag; end; procedure Register; implementation { TEditBtn } constructor TEditBtn.Create(AOwner: TComponent); begin inherited Create(AOwner); FButton := TSpeedButton.Create (Self); FButton.Width := 15; FButton.Height := 17; FButton.Flat := true; //Tenho que ver isso aqui tbm if csDesigning in ComponentState then FButton.Visible := True else FButton.Visible := False; FButton.Parent := Self; FButton.OnClick := aClick; FButton.Cursor := crArrow; ControlStyle := ControlStyle - [csSetCaption]; FEditorEnabled := True; end; destructor TEditBtn.Destroy; begin FButton := nil; inherited Destroy; end; procedure TEditBtn.GetChildren(Proc: TGetChildProc; Root: TComponent); begin end; procedure TEditBtn.KeyDown(var Key: Word; Shift: TShiftState); begin inherited KeyDown(Key, Shift); end; procedure TEditBtn.SetGlyph(Pic: TBitmap); Begin FButton.Glyph.Assign(Pic); end; function TEditBtn.GetGlyph : TBitmap; Begin Result:=FButton.Glyph; end; procedure TEditBtn.SetNumGlyphs(ANumber: Integer); Begin FButton.NumGlyphs:=ANumber; end; function TEditBtn.GetNumGlyphs:Integer; begin Result:=FButton.NumGlyphs; end; procedure TEditBtn.KeyPress(var Key: Char); begin if not IsValidChar(Key) then begin Key := #0; MessageBeep(0) end; if Key <> 0 then inherited KeyPress(Key); end; function TEditBtn.IsValidChar(Key: Char): Boolean; begin Result := True; end; procedure TEditBtn.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); { Params.Style := Params.Style and not WS_BORDER; } Params.Style := Params.Style or ES_MULTILINE or WS_CLIPCHILDREN; end; procedure TEditBtn.CreateWnd; begin inherited CreateWnd; SetEditRect; end; procedure TEditBtn.SetEditRect; var Loc: TRect; begin SendMessage(Handle, EM_GETRECT, 0, LongInt(@Loc)); Loc.Bottom := ClientHeight + 1; {+1 is workaround for windows paint bug} Loc.Right := ClientWidth - FButton.Width - 2; Loc.Top := 0; Loc.Left := 0; SendMessage(Handle, EM_SETRECTNP, 0, LongInt(@Loc)); SendMessage(Handle, EM_GETRECT, 0, LongInt(@Loc)); end; procedure TEditBtn.WMSize(var Message: TWMSize); var MinHeight: Integer; begin inherited; MinHeight := 5; { text edit bug: if size to less than minheight, then edit ctrl does not display the text } if Height < MinHeight then Height := MinHeight else if FButton <> nil then begin FButton.Width:=Height; if NewStyleControls and Ctl3D then FButton.SetBounds(Width - FButton.Width - 5, 0, FButton.Width, Height - 5) else FButton.SetBounds (Width - FButton.Width, 1, FButton.Width, Height - 1); SetEditRect; end; end; function TEditBtn.GetMinHeight: Integer; var DC: HDC; SaveFont: HFont; I: Integer; SysMetrics, Metrics: TTextMetric; begin DC := GetDC(0); GetTextMetrics(DC, SysMetrics); SaveFont := SelectObject(DC, Font.Handle); GetTextMetrics(DC, Metrics); SelectObject(DC, SaveFont); ReleaseDC(0, DC); I := SysMetrics.tmHeight; if I > Metrics.tmHeight then I := Metrics.tmHeight; Result := Metrics.tmHeight + I div 4 + GetSystemMetrics(SM_CYBORDER) * 4 + 2; end; procedure TEditBtn.aClick (Sender: TObject); begin if ReadOnly then MessageBeep(0) else IF Assigned(FOnBtnClick) then FOnBtnClick(Self); end; procedure TEditBtn.WMPaste(var Message: TWMPaste); begin if not FEditorEnabled or ReadOnly then Exit; inherited; end; procedure TEditBtn.WMCut(var Message: TWMPaste); begin if not FEditorEnabled or ReadOnly then Exit; inherited; end; procedure TEditBtn.CMExit(var Message: TCMExit); begin FButton.Visible:=False; inherited; end; procedure TEditBtn.CMEnter(var Message: TCMGotFocus); begin FButton.Visible:=True; if AutoSelect and not (csLButtonDown in ControlState) then SelectAll; inherited; end; procedure Register; begin RegisterComponents(´freeware´, [TEditBtn]); end; end.
GOSTEI 0
Distribuidora Coimbra
11/01/2006
Alguém conseguiu colocar um botão dentro de um edit?
Bem.. Eu até que consegui colocar porém o botão fica por cima do texto.
Alguém sabe se tem alguma propriedade que mexe exatamente com isso?
Bem.. Eu até que consegui colocar porém o botão fica por cima do texto.
Alguém sabe se tem alguma propriedade que mexe exatamente com isso?
GOSTEI 0
Thiago Santana
11/01/2006
GOSTEI 0