unit MainForm;
{$mode objfpc}{$H+}
interface
uses
Windows, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, Buttons, ComCtrls, ShellApi,
QFileListView;
type
{ TFormMain }
TFormMain = class(TForm)
BtnBrowse: TButton;
BtnRefresh: TButton;
BtnParent: TButton;
CheckShowHidden: TCheckBox;
EditPath: TEdit;
LabelPath: TLabel;
LabelViewMode: TLabel;
PanelTop: TPanel;
PanelControls: TPanel;
PanelViewMode: TPanel;
ComboBox1: TComboBox;
procedure BtnBrowseClick(Sender: TObject);
procedure BtnParentClick(Sender: TObject);
procedure BtnRefreshClick(Sender: TObject);
procedure CheckShowHiddenClick(Sender: TObject);
procedure EditPathKeyPress(Sender: TObject; var Key: char);
procedure FormCreate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
FFileListView: TQFileListView;
FUpdatingView: Boolean;
procedure FileListViewDblClick(Sender: TObject);
procedure FileListViewViewModeChanged(Sender: TObject);
public
end;
var
FormMain: TFormMain;
implementation
{$R *.lfm}
{ TFormMain }
procedure TFormMain.FormCreate(Sender: TObject);
begin
Caption := 'TQFileListView Demo';
Width := 900;
Height := 600;
Position := poScreenCenter;
FUpdatingView := False;
// Create the TQFileListView component
FFileListView := TQFileListView.Create(Self);
FFileListView.Parent := Self;
FFileListView.Align := alClient;
FFileListView.Directory := GetCurrentDir;
FFileListView.ShowHidden := CheckShowHidden.Checked;
FFileListView.AllowColumnReorder := True;
FFileListView.MultiSelect:=True;
FFileListView.OnDblClick := @FileListViewDblClick;
FFileListView.OnViewModeChanged := @FileListViewViewModeChanged;
EditPath.Text := GetCurrentDir;
ComboBox1.DropDownCount:=20;
with ComboBox1.Items do
begin
AddObject('Medium Icons (32)', TObject(PtrInt(qflVIEW_ICON)));
AddObject('Small Icons (16)', TObject(PtrInt(qflVIEW_SMALL_ICON)));
AddObject('List' , TObject(PtrInt(qflVIEW_LIST)));
AddObject('Details' , TObject(PtrInt(qflVIEW_REPORT)));
AddObject('' , TObject(PtrInt(99)));
AddObject('Large Icons (48)', TObject(PtrInt(qflVIEW_48 )));
AddObject('Large Icons (64)', TObject(PtrInt(qflVIEW_64 )));
AddObject('Large Icons (80)', TObject(PtrInt(qflVIEW_80 )));
AddObject('Large Icons (96)', TObject(PtrInt(qflVIEW_96 )));
AddObject('Large Icons (112)', TObject(PtrInt(qflVIEW_112)));
AddObject('Large Icons (128)', TObject(PtrInt(qflVIEW_128)));
AddObject('Large Icons (144)', TObject(PtrInt(qflVIEW_144)));
AddObject('Large Icons (160)', TObject(PtrInt(qflVIEW_160)));
AddObject('Large Icons (176)', TObject(PtrInt(qflVIEW_176)));
AddObject('Large Icons (192)', TObject(PtrInt(qflVIEW_192)));
AddObject('Large Icons (256)', TObject(PtrInt(qflVIEW_256)));
end;
FUpdatingView := True;
try
ComboBox1.ItemIndex := 3;
ComboBox1Change(ComboBox1);
finally
FUpdatingView := False;
end;
end;
procedure TFormMain.ComboBox1Change(Sender: TObject);
var
ViewValue: Integer;
begin
if FUpdatingView then Exit;
if ComboBox1.ItemIndex >= 0 then
begin
FUpdatingView := True;
try
ViewValue := PtrInt(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
FFileListView.ActualViewIndex := ViewValue;
finally
FUpdatingView := False;
end;
end;
end;
procedure TFormMain.BtnBrowseClick(Sender: TObject);
var
Directory: string;
begin
if Assigned(FFileListView) then
Directory := FFileListView.Directory
else
Directory := GetCurrentDir;
if SelectDirectory('Select Directory', '', Directory) then
begin
EditPath.Text := Directory;
if Assigned(FFileListView) then
FFileListView.Directory := Directory;
end;
end;
procedure TFormMain.BtnRefreshClick(Sender: TObject);
begin
FFileListView.Refresh;
end;
procedure TFormMain.BtnParentClick(Sender: TObject);
var
ParentDir: string;
begin
ParentDir := ExtractFileDir(ExcludeTrailingPathDelimiter(FFileListView.Directory));
if (ParentDir <> '') and DirectoryExists(ParentDir) then
begin
FFileListView.Directory := ParentDir;
EditPath.Text := ParentDir;
end;
end;
procedure TFormMain.CheckShowHiddenClick(Sender: TObject);
begin
FFileListView.ShowHidden := CheckShowHidden.Checked;
end;
procedure TFormMain.EditPathKeyPress(Sender: TObject; var Key: char);
begin
if Key = #13 then // Enter key
begin
Key := #0; // Consume the key
if DirectoryExists(EditPath.Text) then
begin
FFileListView.Directory := EditPath.Text;
end
else
begin
ShowMessage('Directory does not exist: ' + EditPath.Text);
EditPath.Text := FFileListView.Directory;
end;
end;
end;
procedure TFormMain.FileListViewDblClick(Sender: TObject);
var
FullPath: string;
begin
if FFileListView.Selected <> nil then
begin
FullPath := IncludeTrailingPathDelimiter(FFileListView.Directory) +
FFileListView.GetSelectedFileName;
if {%H-}PtrInt(FFileListView.Selected.Data) = -1 then
begin
if DirectoryExists(FullPath) then
begin
FFileListView.Directory := FullPath;
EditPath.Text := FullPath;
end;
end
else
begin
ShellExecute(Handle, 'open', PChar(FullPath), nil, nil, SW_SHOWNORMAL);
end;
end;
end;
procedure TFormMain.FileListViewViewModeChanged(Sender: TObject);
var
i: Integer;
CurrentMode: Integer;
begin
if FUpdatingView then Exit;
CurrentMode := FFileListView.ActualViewIndex;
FUpdatingView := True;
try
for i := 0 to ComboBox1.Items.Count - 1 do
begin
if PtrInt(ComboBox1.Items.Objects[i]) = CurrentMode then
begin
ComboBox1.ItemIndex := i;
Break;
end;
end;
finally
FUpdatingView := False;
end;
end;
end.