AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Editfeld mit Closebutton - Wie macht man sowas?
Thema durchsuchen
Ansicht
Themen-Optionen

Editfeld mit Closebutton - Wie macht man sowas?

Ein Thema von Mithrandir · begonnen am 4. Sep 2009 · letzter Beitrag vom 4. Sep 2009
Antwort Antwort
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 13:54
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?
Miniaturansicht angehängter Grafiken
editfeldmitclosebtn_481.png  
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 13:56
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#3

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 14:34
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...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 14:55
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

[edit=mkinzler]Code-Tag mit Delphi-Tag ersetzt Mfg, mkinzler[/edit]
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 15:44
Zitat von himitsu:
kopieren und auf Form einfügen
Zitat von himitsu:
der die Billig-Version
Das geht (IMNSHO) schneller, billiger und sauberer:
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;
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#6

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 15:49


Danke für die zahlreichen Anregungen. Vielleicht könnte man als echte Alternative über einen Speedbutton nachdenken. Mal sehen. Momentan passt es erstmal.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#7

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 16:52
@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.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#8

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 17:18
Hmm... Das wäre ein alternative, mal gucken. Danke.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Editfeld mit Closebutton - Wie macht man sowas?

  Alt 4. Sep 2009, 19:46
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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