![]() |
Editfeld mit Closebutton - Wie macht man sowas?
Liste der Anhänge anzeigen (Anzahl: 1)
Hi ihr,
der Thunderbird hats und ich hätte gerne auch sowas. Ein Editfeld mit eigenem Close-Button, der nur bei Bedarf erscheint. Gibts eine fertige Komponente, die dieses Verhalten implementiert? Oder muss ich das irgendwie selbst gebacken bekommen? |
Re: Editfeld mit Closebutton - Wie macht man sowas?
Mit D2006 müsstest Du wohl auf Komponenten von Drittherstellen zurückgreifen. Gibt's da vielleicht bei den JEDIS etwas? Erst ab Delphi 2009 liegt per Standard ein TButtonedEdit bei, welches genau die von Dir gewünschten Eigenschaften aufweist.
|
Re: Editfeld mit Closebutton - Wie macht man sowas?
Argh, das war klar. Das TButtonedEdit ist schon schicke. Ich hab
![]() |
Re: Editfeld mit Closebutton - Wie macht man sowas?
kopieren und auf Form einfügen
Delphi-Quellcode:
object Panel1: TPanel
Left = 24 Top = 40 Width = 145 Height = 21 BevelOuter = bvNone BorderStyle = bsSingle Color = clWindow ParentBackground = False TabOrder = 0 DesignSize = ( 141 17) object Edit1: TEdit Left = 0 Top = 0 Width = 121 Height = 17 Anchors = [akLeft, akTop, akRight, akBottom] AutoSize = False BorderStyle = bsNone TabOrder = 0 Text = 'Edit1' end object Button1: TButton Left = 125 Top = 1 Width = 15 Height = 15 Anchors = [akLeft, akTop, akRight, akBottom] Caption = 'r' Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' Font.Style = [] ParentFont = False TabOrder = 1 end end object Button2: TButton Left = 24 Top = 96 Width = 75 Height = 25 Caption = 'Button2' TabOrder = 1 OnClick = Button2Click end
Delphi-Quellcode:
oder die Billig-Version
Procedure TForm1.Button2Click(Sender: TObject);
Begin Panel1.Tag := (Panel1.Tag + 1) mod 2; Button1.Visible := Panel1.Tag = 0; If Button1.Visible Then Edit1.Width := Button1.Left - 2 Else Edit1.Width := Panel1.ClientWidth; End; > ein Edit > rechts einen Button drüberlegen > und diesen nur noch ein-/ausblenden (visible) [edit] noch schnell die Anchors gesetzt :oops: [edit=mkinzler]Code-Tag mit Delphi-Tag ersetzt Mfg, mkinzler[/edit] |
Re: Editfeld mit Closebutton - Wie macht man sowas?
Zitat:
Zitat:
Delphi-Quellcode:
object Button2: TButton
Left = 24 Top = 96 Width = 75 Height = 25 Caption = 'Button2' TabOrder = 1 OnClick = Button2Click end object Edit1: TEdit Left = 24 Top = 40 Width = 145 Height = 21 TabOrder = 2 Text = 'Edit1' end object Button1: TButton Left = 152 Top = 17 Width = 17 Height = 17 Caption = 'r' Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Marlett' Font.Style = [] ParentFont = False TabOrder = 0 end
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Button1.Parent := Edit1; Button1.Align := alRight; end; procedure TForm1.Button2Click(Sender: TObject); begin Button1.Visible := not Button1.Visible; end; |
Re: Editfeld mit Closebutton - Wie macht man sowas?
:stupid:
Danke für die zahlreichen Anregungen. :mrgreen: Vielleicht könnte man als echte Alternative über einen Speedbutton nachdenken. Mal sehen. Momentan passt es erstmal. ;) |
Re: Editfeld mit Closebutton - Wie macht man sowas?
@himitsu: Anstatt ein TPanel würde ich ein TjvPanel von den Jedis verwenden. Stellt man dieses auf BorderStyle := bsSingle und die Farbe auf clWhite sowie BevelInner und BevelOuter auf bvNone siehts aus wie ein Edit, auch bei aktivierten Themes. Beim normalen TPanel siehts nur unter Win2000-Style wie ein Edit aus.
|
Re: Editfeld mit Closebutton - Wie macht man sowas?
Hmm... Das wäre ein alternative, mal gucken. Danke. :)
|
Re: Editfeld mit Closebutton - Wie macht man sowas?
Aus meinem "Spiel"-Projekt:
Delphi-Quellcode:
TForm1 = class(TForm)
MyEditButton1: TSpeedButton; MyEdit: TEdit; MyEditButton2: TButton; MyEditButton3: TSpeedButton; // snip end;
Delphi-Quellcode:
Das müsste natürlich alles noch schön gekapselt werden, funktioniert aber schon besser als ich gehofft hätte. Buttons am linken Rand verschwinden manchmal - vielleicht ist Align-en in einem Edit nicht sooo ne tolle Idee. :mrgreen:
procedure UpdateButtonEdit(AEdit: TCustomEdit);
var i: Integer; c: TControl; wr, wl: Integer; begin wr := 0; wl := 0; for i := 0 to Pred(AEdit.ControlCount) do begin c := AEdit.Controls[i]; if c.Visible then case c.Align of alLeft: Inc(wl, c.Width); alRight: Inc(wr, c.Width); end; end; SendMessage(TCustomEdit(AEdit).Handle, EM_SETMARGINS, EC_LEFTMARGIN or EC_RIGHTMARGIN, MAKELONG(wl, wr)); end; procedure MakeButtonEdit(AEdit: TCustomEdit; AButton: TControl; AAlign: TAlign); begin AButton.Parent := AEdit; AButton.Align := AAlign; AButton.Cursor := crArrow; UpdateButtonEdit(AEdit); end; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin MakeButtonEdit(MyEdit, MyEditButton1, alRight); MakeButtonEdit(MyEdit, MyEditButton2, alRight); MakeButtonEdit(MyEdit, MyEditButton3, alLeft); end; procedure TForm1.Button2Click(Sender: TObject); begin MyEditButton1.Visible := not MyEditButton1.Visible; UpdateButtonEdit(MyEdit); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz