home *** CD-ROM | disk | FTP | other *** search
- unit FMXWin;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, FileCtrl, Grids, Outline, DirOutln, Tabs, ExtCtrls, Menus;
-
- type
- TFMForm = class(TForm)
- StatusBar: TPanel;
- DirectoryPanel: TPanel;
- FilePanel: TPanel;
- DriveTabSet: TTabSet;
- DirectoryOutline: TDirectoryOutline;
- FileList: TFileListBox;
- MainMenu1: TMainMenu;
- File1: TMenuItem;
- Open1: TMenuItem;
- Move1: TMenuItem;
- Copy1: TMenuItem;
- Delete1: TMenuItem;
- Rename1: TMenuItem;
- Properties1: TMenuItem;
- N1: TMenuItem;
- Exit1: TMenuItem;
- Floppy: TImage;
- Fixed: TImage;
- Network: TImage;
- CDRom: TImage;
- RamDisk: TImage;
- procedure Exit1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure DirectoryOutlineChange(Sender: TObject);
- procedure FileListChange(Sender: TObject);
- procedure DriveTabSetMeasureTab(Sender: TObject; Index: Integer;
- var TabWidth: Integer);
- procedure DriveTabSetDrawTab(Sender: TObject; TabCanvas: TCanvas;
- R: TRect; Index: Integer; Selected: Boolean);
- procedure File1Click(Sender: TObject);
- procedure Delete1Click(Sender: TObject);
- procedure Properties1Click(Sender: TObject);
- procedure FileChange(Sender: TObject);
- procedure Open1Click(Sender: TObject);
- procedure FileListMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure DirectoryOutlineDragOver(Sender, Source: TObject; X,
- Y: Integer; State: TDragState; var Accept: Boolean);
- procedure DirectoryOutlineDragDrop(Sender, Source: TObject; X,
- Y: Integer);
- procedure FileListEndDrag(Sender, Target: TObject; X, Y: Integer);
- procedure DriveTabSetChange(Sender: TObject; NewTab: Integer;
- var AllowChange: Boolean);
- private
- procedure ConfirmChange(const ACaption, FromFile, ToFile: string);
- public
- { Public declarations }
- end;
-
- var
- FMForm: TFMForm;
-
- implementation
-
- uses FmxUtils, FAttrDlg, FChngDlg;
-
- {$R *.DFM}
-
- procedure TFMForm.Exit1Click(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TFMForm.FormCreate(Sender: TObject);
- var
- Drive: Char;
- AddedIndex: Integer;
- begin
- for Drive := 'a' to 'z' do
- begin
- case GetDriveType(PChar(Drive + ':\')) of
- DRIVE_REMOVABLE:
- AddedIndex := DriveTabSet.Tabs.AddObject(Drive, Floppy.Picture.Graphic);
- DRIVE_FIXED:
- AddedIndex := DriveTabSet.Tabs.AddObject(Drive, Fixed.Picture.Graphic);
- DRIVE_CDROM:
- AddedIndex := DriveTabSet.Tabs.AddObject(Drive, CDRom.Picture.Graphic);
- DRIVE_RAMDISK:
- AddedIndex := DriveTabSet.Tabs.AddObject(Drive, RamDisk.Picture.Graphic);
- DRIVE_REMOTE:
- AddedIndex := DriveTabSet.Tabs.AddObject(Drive, Network.Picture.Graphic);
- else
- AddedIndex := 0;
- end;
- if UpCase(Drive) = FileList.Drive then
- DriveTabSet.TabIndex := AddedIndex;
- end;
- end;
-
- procedure TFMForm.DriveTabSetChange(Sender: TObject; NewTab: Integer;
- var AllowChange: Boolean);
- begin
- if not (csDesigning in ComponentState) then
- begin
- AllowChange := True;
- try
- with DriveTabSet do
- DirectoryOutline.Drive := Tabs[NewTab][1];
- except
- on EInOutError do
- begin
- AllowChange := False;
- with DriveTabSet do
- DirectoryOutline.Drive := Tabs[TabIndex][1];
- raise;
- end;
- end;
- end;
- end;
-
- procedure TFMForm.DirectoryOutlineChange(Sender: TObject);
- begin
- FileList.Directory := DirectoryOutline.Directory;
- DirectoryPanel.Caption := DirectoryOutline.Directory;
- end;
-
- procedure TFMForm.FileListChange(Sender: TObject);
- var
- TheFileName: string;
- begin
- with FileList do
- begin
- if ItemIndex >= 0 then
- begin
- TheFileName := Items[ItemIndex];
- FilePanel.Caption := Format('%s, %d bytes', [TheFileName, GetFileSize(TheFileName)]);
- end
- else FilePanel.Caption := '';
- end;
- end;
-
- procedure TFMForm.DriveTabSetMeasureTab(Sender: TObject; Index: Integer;
- var TabWidth: Integer);
- var
- BitmapWidth: Integer;
- begin
- BitmapWidth := TBitmap(DriveTabSet.Tabs.Objects[Index]).Width;
- Inc(TabWidth, 2 + BitmapWidth);
- end;
-
- procedure TFMForm.DriveTabSetDrawTab(Sender: TObject; TabCanvas: TCanvas;
- R: TRect; Index: Integer; Selected: Boolean);
- var
- Bitmap: TBitmap;
- begin
- Bitmap := TBitmap(DriveTabSet.Tabs.Objects[Index]);
- with TabCanvas do
- begin
- Draw(R.Left, R.Top + 4, Bitmap);
- TextOut(R.Left + 2 + Bitmap.Width, R.Top + 2, DriveTabSet.Tabs[Index]);
- end;
- end;
-
- procedure TFMForm.File1Click(Sender: TObject);
- var
- FileSelected: Boolean;
- begin
- FileSelected := FileList.ItemIndex >= 0;
- Open1.Enabled := FileSelected;
- Delete1.Enabled := FileSelected;
- Copy1.Enabled := FileSelected;
- Move1.Enabled := FileSelected;
- Rename1.Enabled := FileSelected;
- Properties1.Enabled := FileSelected;
- end;
-
- procedure TFMForm.Delete1Click(Sender: TObject);
- begin
- with FileList do
- if MessageDlg('Delete ' + FileName + '?', mtConfirmation,
- [mbYes, mbNo], 0) = mrYes then
- if DeleteFile(FileName) then Update;
- end;
-
- procedure TFMForm.Properties1Click(Sender: TObject);
- var
- Attributes, NewAttributes: Word;
- begin
- with FileAttrForm do
- begin
- FileDirName.Caption := FileList.Items[FileList.ItemIndex];
- FilePathName.Caption := FileList.Directory;
- ChangeDate.Caption := DateTimeToStr(FileDateTime(FileList.FileName));
- Attributes := FileGetAttr(FileDirName.Caption);
- ReadOnly.Checked := (Attributes and faReadOnly) = faReadOnly;
- Archive.Checked := (Attributes and faArchive) = faArchive;
- System.Checked := (Attributes and faSysFile) = faSysFile;
- Hidden.Checked := (Attributes and faHidden) = faHidden;
- if ShowModal <> mrCancel then
- begin
- NewAttributes := Attributes;
- if ReadOnly.Checked then NewAttributes := NewAttributes or faReadOnly
- else NewAttributes := NewAttributes and not faReadOnly;
- if Archive.Checked then NewAttributes := NewAttributes or faArchive
- else NewAttributes := NewAttributes and not faArchive;
- if System.Checked then NewAttributes := NewAttributes or faSysFile
- else NewAttributes := NewAttributes and not faSysFile;
- if Hidden.Checked then NewAttributes := NewAttributes or faHidden
- else NewAttributes := NewAttributes and not faHidden;
- if NewAttributes <> Attributes then
- FileSetAttr(FileDirName.Caption, NewAttributes);
- end;
- end;
- end;
-
- procedure TFMForm.ConfirmChange(const ACaption, FromFile, ToFile: string);
- begin
- if MessageDlg(Format('%s %s to %s?', [ACaption, FromFile, ToFile]),
- mtConfirmation, [mbYes, mbNo], 0) = mrYes then
- begin
- if ACaption = 'Move' then
- MoveFile(FromFile, ToFile)
- else if ACaption = 'Copy' then
- CopyFile(FromFile, ToFile)
- else if ACaption = 'Rename' then
- RenameFile(FromFile, ToFile);
- FileList.Update;
- end;
- end;
-
- procedure TFMForm.FileChange(Sender: TObject);
- begin
- with ChangeDlg do
- begin
- if Sender = Move1 then Caption := 'Move'
- else if Sender = Copy1 then Caption := 'Copy'
- else if Sender = Rename1 then Caption := 'Rename'
- else Exit;
- CurrentDir.Caption := DirectoryOutline.Directory;
- FromFileName.Text := FileList.FileName;
- ToFileName.Text := '';
- if (ShowModal <> mrCancel) and (ToFileName.Text <> '') then
- ConfirmChange(Caption, FromFileName.Text, ToFileName.Text);
- end;
- end;
-
- procedure TFMForm.Open1Click(Sender: TObject);
- begin
- with FileList do
- begin
- if HasAttr(FileName, faDirectory) then
- DirectoryOutline.Directory := FileName
- else ExecuteFile(FileName, '', Directory, SW_SHOW);
- end;
- end;
-
- procedure TFMForm.FileListMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- if Button = mbLeft then
- with Sender as TFileListBox do
- begin
- if ItemAtPos(Point(X, Y), True) >= 0 then
- BeginDrag(False);
- end;
- end;
-
- procedure TFMForm.DirectoryOutlineDragOver(Sender, Source: TObject; X,
- Y: Integer; State: TDragState; var Accept: Boolean);
- begin
- Accept := (Source is TFileListBox) and (DirectoryOutline.GetItem(X, Y) > 0);
- end;
-
- procedure TFMForm.DirectoryOutlineDragDrop(Sender, Source: TObject; X,
- Y: Integer);
- begin
- if Source is TFileListBox then
- with DirectoryOutline do
- ConfirmChange('Move', FileList.FileName, Items[GetItem(X, Y)].FullPath);
- end;
-
- procedure TFMForm.FileListEndDrag(Sender, Target: TObject; X, Y: Integer);
- begin
- if Target <> nil then FileList.Update;
- end;
-
- end.
-