Einzelnen Beitrag anzeigen

Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#1

FMX: Seltsames Verhalten beim Entfernen von ListboxItems

  Alt 6. Jan 2017, 10:39
Hi,

ich hätte da gerne wieder mal ein Problem mit FMX unter Berlin 1.2. Man nehme:
  • Ein neues plattformübergreifendes Projekt
  • Auf das Formular kommen zwei TButtons und eine TListBox
  • Ein Button wird AddBtn genannt, der andere RemoveBtn
  • Dann ergänze man den Code wie im folgenden gezeigt
Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
  FMX.ListBox, FMX.Controls.Presentation, FMX.StdCtrls;

type
  TForm1 = class(TForm)
    AddBtn: TButton;
    ListBox1: TListBox;
    RemoveBtn: TButton;
    procedure AddBtnClick(Sender: TObject);
    procedure DelBtnClick(Sender: TObject);
    procedure RemoveBtnClick(Sender: TObject);
  private
    {Private-Deklarationen}
  public
    {Public-Deklarationen}
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}


procedure TForm1.AddBtnClick(Sender: TObject);
var
  myListItem : TListBoxItem;
  myDelBtn : TSpeedButton;
begin
  myListItem := TListBoxItem.Create(ListBox1);
  myListItem.Parent := ListBox1;

  myDelBtn := TSpeedButton.Create(myListItem);
  myDelBtn.Parent := myListItem;
  myDelBtn.Width := 50;
  myDelBtn.Align := TAlignLayout.Right;
  myDelBtn.StyleLookup := 'trashtoolbuttonbordered';
  myDelBtn.OnClick := DelBtnClick;
end;

procedure TForm1.RemoveBtnClick(Sender: TObject);
begin
  if ListBox1.Count > 0 then
  begin
    ListBox1.ListItems[0].Free;
  end;
end;

procedure TForm1.DelBtnClick(Sender: TObject);
begin
  if TFmxObject(Sender).Parent is TListBoxItem then
  begin
    TListBoxItem(TFmxObject(Sender).Parent).IsSelected := True;
    ListBox1.Selected.Free;
    ListBox1.ItemIndex := -1;
  end;
end;

end.
Als Ergebnis kann man mit dem AddBtn Einträge in die Listbox hinzufügen, und mit dem RemoveBtn den jeweils obersten löschen. Das funktioniert wunderbar. In der Listbox gibt es aber netterweise noch einen weiteren Button pro Eintrag, mit dem gezielt dieser Eintrag entfernt werden kann. Wenn man das nutzt ist scheinbar auch alles in Butter, ABER die Titelleiste der Appilikation reagiert dann erst wieder auf Mausklicks, wenn man eine der Komponenten anklickt.
  1. Kann das jemand nachvollziehen?
  2. Weiss jemand wie man das korrigieren kann?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat