home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 August
/
VPR9708A.ISO
/
D3TRIAL
/
INSTALL
/
DATA.Z
/
FMXWIN.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1997-05-08
|
9KB
|
286 lines
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);
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.