Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Editfeld mit Closebutton - Wie macht man sowas? (https://www.delphipraxis.net/139752-editfeld-mit-closebutton-wie-macht-man-sowas.html)

Mithrandir 4. Sep 2009 12:54


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?

Daniel 4. Sep 2009 12:56

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.

Mithrandir 4. Sep 2009 13:34

Re: Editfeld mit Closebutton - Wie macht man sowas?
 
Argh, das war klar. Das TButtonedEdit ist schon schicke. Ich hab hier etwas ähnliches gefunden, leider nicht ganz so schick. Mal sehen, fürs erste reichts ja...

himitsu 4. Sep 2009 13:55

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:
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;
oder die Billig-Version
> 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]

uligerhardt 4. Sep 2009 14:44

Re: Editfeld mit Closebutton - Wie macht man sowas?
 
Zitat:

Zitat von himitsu
kopieren und auf Form einfügen

Zitat:

Zitat von himitsu
der die Billig-Version

Das geht (IMNSHO) schneller, billiger und sauberer: :mrgreen:
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;

Mithrandir 4. Sep 2009 14:49

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. ;)

Andreas L. 4. Sep 2009 15:52

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.

Mithrandir 4. Sep 2009 16:18

Re: Editfeld mit Closebutton - Wie macht man sowas?
 
Hmm... Das wäre ein alternative, mal gucken. Danke. :)

uligerhardt 4. Sep 2009 18:46

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:
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;
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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz