{
 ***************************************************************************
 *                                                                         *
 *   This source is free software; you can redistribute it and/or modify   *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This code is distributed in the hope that it will be useful, but      *
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 *   General Public License for more details.                              *
 *                                                                         *
 *   A copy of the GNU General Public License is available on the World    *
 *   Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also      *
 *   obtain it by writing to the Free Software Foundation,                 *
 *   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1335, USA.   *
 *                                                                         *
 ***************************************************************************
}
program ListBoxTest;

{$mode objfpc}{$H+}

uses
  Interfaces, Classes, Forms, StdCtrls, SysUtils, Controls, LazLogger;

type
  TListBoxTestForm = class(TForm)
  public
    Button1, Button2, Button3, Button4:   TButton;
    ListBox:  TListBox;
    constructor Create(AOwner: TComponent); override;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
  end;

var
  ListBoxTestForm: TListBoxTestForm;

{------------------------------------------------------------------------------}
{  TListBoxTestForm                                          }
{------------------------------------------------------------------------------}
constructor TListBoxTestForm.Create(AOwner: TComponent);
begin
  inherited CreateNew(AOwner, 1);
  Width := 300;
  Height := 200;
  Left := 200;
  Top := 200;

  // create children
  Button1 := TButton.Create(Self);
  Button1.OnClick := @Button1Click;
  Button1.Parent := Self;
  Button1.left := 40;
  Button1.top :=  170;
  Button1.width := 50;
  Button1.height := 25;
  Button1.caption := 'New';
  Button1.Show;

  Button2 := TButton.Create(Self);
  Button2.OnClick := @Button2Click;
  Button2.Parent := Self;
  Button2.left := 95;
  Button2.top := 170;
  Button2.width := 50;
  Button2.height := 25;
  Button2.caption := 'Delete';
  Button2.Show;

  Button3 := TButton.Create(Self);
  Button3.OnClick := @Button3Click;
  Button3.Parent := Self;
  Button3.left := 150;
  Button3.top := 170;
  Button3.width := 50;
  Button3.height := 25;
  Button3.caption := 'Clear';
  Button3.Show;

  Button4 := TButton.Create(Self);
  Button4.OnClick := @button4click;
  Button4.Parent := Self;
  Button4.left := 205;
  Button4.top := 170;
  Button4.width := 50;
  Button4.height := 25;
  Button4.caption := 'Unused';
  Button4.Show;

//  ListBox := TCListBox.Create(Self);
  ListBox := TListBox.Create(Self);
  ListBox.Parent := Self;
  ListBox.Left := 10;
  ListBox.Top := 10;
  ListBox.Width := 280;
  ListBox.Height := 150;
  ListBox.Anchors := [akLeft, akRight, akTop];
{  ListBox.ExtendedSelect := true;
  ListBox.MultiSelect := true;
 } ListBox.Show;
 
  OnResize := @FormResize;
end;

procedure TListBoxTestForm.Button1Click(Sender: TObject);
var
  Index: integer;
begin
  Index := ListBox.ItemIndex;
  if Index = -1 then
    ListBox.Items.Add('Button 1 clicked')
  else 
    ListBox.Items.Insert(Index, 'Button 1 clicked at '+IntToStr(Index));
  for Index := 0 to ListBox.Items.Count - 1 do 
    ListBox.Items.Objects[Index] := TObject(PtrInt(Index));
end;

procedure TListBoxTestForm.Button2Click(Sender: TObject);
var
  Index: integer;
begin
  Index := ListBox.ItemIndex;
  if Index <> -1
  then ListBox.Items.Delete(Index);
end;

procedure TListBoxTestForm.Button3Click(Sender: TObject);
begin
  ListBox.Items.Clear;
end;

procedure TListBoxTestForm.Button4Click(Sender: TObject);
var
  X: PtrInt;
begin
  if ListBox.ItemIndex < 0 then Exit;
  X := PtrInt(ListBox.Items.Objects[ListBox.ItemIndex]);
  DebugLn(['TListBoxTestForm.Button4Click ',X]);
end;

procedure TListBoxTestForm.FormResize(Sender: TObject);
begin                      
  Caption := Format('%dx%d', [ListBox.Width, ListBox.Height]);
end;

begin
   Application.Initialize;
   Application.CreateForm(TListBoxTestForm, ListBoxTestForm);
   Application.Run;
end.