Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

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

Re: Editfeld mit Closebutton - Wie macht man sowas?

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