home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 1995 May
/
pcw-0595.bin
/
demos
/
databeck
/
wsounds
/
setup.dir
/
wswsrc.exe
/
SCANDLG.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-12-03
|
8KB
|
301 lines
unit ScanDlg;
interface
uses WinTypes, WinProcs, WinDos, WObjects, Strings, MMSystem, DataObj,
TakeDlg, ShowRDlg, WAVEIO;
const
dn_ScanDlg = 'ScanDlg';
id_FPath = 501;
id_FList = 502;
id_DList = 503;
id_TakeOne = 504;
id_TakeAll = 505;
id_SubScan = 506;
id_GoAhead = 507;
id_Play = 508;
id_Display = 509;
const
fsFileSpec = fsFileName + fsExtension;
type
PScanDlg = ^TScanDlg;
TScanDlg = object(TDialog)
sbscan : BOOL;
Caption: PChar;
FileName: PChar;
FilePath: PChar;
PathName: array[0..fsPathName] of Char;
Extension: array[0..fsExtension] of Char;
FileSpec: array[0..fsFileSpec] of Char;
constructor Init(AParent: PWindowsObject; AName, AFilePath: PChar);
function CanClose: Boolean; virtual;
procedure SetupWindow; virtual;
{procedure HandleFName(var Msg: TMessage); virtual id_First + id_FName;}
procedure HandleFList(var Msg: TMessage); virtual id_First + id_FList;
procedure HandleDList(var Msg: TMessage); virtual id_First + id_DList;
procedure HandleTakeOne (var Msg: TMessage); virtual id_First + id_TakeOne;
procedure HandlePlay (var Msg: TMessage); virtual id_First + id_Play;
procedure HandleTakeAll (var Msg: TMessage); virtual id_First + id_TakeAll;
procedure HandleSubScan(var Msg: TMessage); virtual id_First + id_SubScan;
{procedure HandleStop (var Msg : TMessage); virtual id_First + id_Stop;}
procedure RefreshDisplay;
Destructor Done;virtual;
private
procedure SelectFileName;
procedure UpdateFileName;
function UpdateListBoxes: Boolean;
end;
implementation
function GetFileName(FilePath: PChar): PChar;
var
P: PChar;
begin
P := StrRScan(FilePath, '\');
if P = nil then P := StrRScan(FilePath, ':');
if P = nil then GetFileName := FilePath else GetFileName := P + 1;
end;
function GetExtension(FilePath: PChar): PChar;
var
P: PChar;
begin
P := StrScan(GetFileName(FilePath), '.');
if P = nil then GetExtension := StrEnd(FilePath) else GetExtension := P;
end;
function HasWildCards(FilePath: PChar): Boolean;
begin
HasWildCards := (StrScan(FilePath, '*') <> nil) or
(StrScan(FilePath, '?') <> nil);
end;
{ TScanDlg }
constructor TScanDlg.Init(AParent: PWindowsObject;
AName, AFilePath: PChar);
begin
TDialog.Init(AParent, AName);
Caption := nil;
FilePath := AFilePath;
{WriteLn(FilePath);}
WaveSelectColl := New(PWaveCollection, Init(20,5));
sbscan := FALSE;
end;
function TScanDlg.CanClose: Boolean;
var
PathLen: Word;
begin
{
CanClose := False;
GetDlgItemText(HWindow, id_FName, PathName, fsPathName + 1);
FileExpand(PathName, PathName);
PathLen := StrLen(PathName);
if (PathName[PathLen - 1] = '\') or HasWildCards(PathName) or
(GetFocus = GetDlgItem(HWindow, id_DList)) then
begin
if PathName[PathLen - 1] = '\' then
StrLCat(PathName, FileSpec, fsPathName);
if not UpdateListBoxes then
begin
MessageBeep(0);
SelectFileName;
end;
Exit;
end;
StrLCat(StrLCat(PathName, '\', fsPathName), FileSpec, fsPathName);
if UpdateListBoxes then Exit;
PathName[PathLen] := #0;
if GetExtension(PathName)[0] = #0 then
StrLCat(PathName, Extension, fsPathName);
AnsiLower(StrCopy(FilePath, PathName));
}
CanClose := True;
end;
procedure TScanDlg.SetupWindow;
begin
{SendDlgItemMessage(HWindow, id_FName, em_LimitText, fsPathName, 0);}
{CheckRadioButton(HWindow, id_Normal, id_Loop, id_Normal);}
if Caption <> nil then SetWindowText(HWindow, Caption);
StrLCopy(PathName, FilePath, fsPathName);
StrLCopy(Extension, GetExtension(PathName), fsExtension);
if HasWildCards(Extension) then Extension[0] := #0;
if not UpdateListBoxes then
begin
StrCopy(PathName, '*.*');
UpdateListBoxes;
end;
SelectFileName;
RefreshDisplay;
end;
{
procedure TScanDlg.HandleFName(var Msg: TMessage);
begin
if Msg.LParamHi = en_Change then
EnableWindow(GetDlgItem(HWindow, id_Ok),
SendMessage(Msg.LParamLo, wm_GetTextLength, 0, 0) <> 0);
end;
}
procedure TScanDlg.HandleFList(var Msg: TMessage);
begin
case Msg.LParamHi of
lbn_SelChange, lbn_DblClk:
begin
DlgDirSelect(HWindow, PathName, id_FList);
UpdateFileName;
if Msg.LParamHi = lbn_DblClk then HandleTakeOne(Msg);
{HandlePlay(Msg);}
end;
lbn_KillFocus:
SendMessage(Msg.LParamLo, lb_SetCurSel, Word(-1), 0);
end;
end;
procedure TScanDlg.HandleDList(var Msg: TMessage);
begin
case Msg.LParamHi of
lbn_SelChange, lbn_DblClk:
begin
DlgDirSelect(HWindow, PathName, id_DList);
StrCat(PathName, FileSpec);
if Msg.LParamHi = lbn_DblClk then
UpdateListBoxes else
UpdateFileName;
end;
lbn_KillFocus:
SendMessage(Msg.LParamLo, lb_SetCurSel, Word(-1), 0);
end;
end;
procedure TScanDlg.HandleTakeOne(var Msg: TMessage);
VAR
Dummy : DirStr;
DirInfo: TSearchrec;
begin
getCurDir(Dummy,0);
{GetDlgItemText(HWindow, ID_FPath, Dummy, fsPathName +1 );}
if Dummy[StrLen(Dummy)-1] <> '\' then StrCat (Dummy,'\');
WD_ReadOneFile(HWindow,Dummy, Pathname, 0,WaveSelectColl);
RefreshDisplay;
end;
procedure TScanDlg.HandleTakeAll(var Msg: TMessage);
VAR
Dummy : DirStr;
P : PChar;
LDialog : PShowRDlg;
BEGIN
getCurDir(Dummy,0);
{GetDlgItemText(HWindow, ID_FPath, Dummy, fsPathName +1 );}
IF StrLen(Dummy)>= 4 then StrCat (Dummy,'\');
IF sbscan = TRUE Then
Begin
LDialog := New(PShowRDlg, Init(@self, dn_ShowRDlg,WaveSelectColl, Dummy,1));
IF Application^.ExecDialog(LDialog) = ID_OK THEN
BEGIN
END;
End
Else
Begin
LDialog := New(PShowRDlg, Init(@self, dn_ShowRDlg,WaveSelectColl, Dummy,0));
IF Application^.ExecDialog(LDialog) = ID_OK THEN
BEGIN
END;
End;
{
WriteLn(' List all files from the selection list: ');
WD_ListAll(WAVESelectColl);}
RefreshDisplay;
end;
procedure TScanDlg.HandlePlay (var Msg: TMessage);
BEGIN
SndPlaySound(PathName,SND_Async)
END;
procedure TScanDlg.HandleSubScan(var Msg: TMessage);
BEGIN
IF sbscan = FALSE Then
Begin
sbScan := TRUE;
End
Else
Begin
sbScan := FALSE;
End;
END;
{
procedure TScanDlg.HandleStop(var Msg: TMessage);
BEGIN
TScanDlg.EndDlg(0);
END;
}
procedure TScanDlg.SelectFileName;
begin
{SendDlgItemMessage(HWindow, id_FName, em_SetSel, 0, $7FFF0000);}
{SetFocus(GetDlgItem(HWindow, id_FName));}
end;
procedure TScanDlg.UpdateFileName;
begin
{
SetDlgItemText(HWindow, id_FName, AnsiLower(PathName));
SendDlgItemMessage(HWindow, id_FName, em_SetSel, 0, $7FFF0000);
}
end;
function TScanDlg.UpdateListBoxes: Boolean;
var
Result: Integer;
Path: array[0..fsPathName] of Char;
begin
UpdateListBoxes := False;
if GetDlgItem(HWindow, id_FList) <> 0 then
begin
StrCopy(Path, PathName);
Result := DlgDirList(HWindow, Path, id_FList, id_FPath, 0);
if Result <> 0 then DlgDirList(HWindow, '*.*', id_DList, 0, $C010);
end else
begin
StrLCopy(Path, PathName, GetFileName(PathName) - PathName);
StrLCat(Path, '*.*', fsPathName);
Result := DlgDirList(HWindow, Path, id_DList, id_FPath, $C010);
end;
if Result <> 0 then
begin
StrLCopy(FileSpec, GetFileName(PathName), fsFileSpec);
StrCopy(PathName, FileSpec);
UpdateFileName;
UpdateListBoxes := True;
end;
end;
Procedure TScanDlg.RefreshDisplay;
Var out : array[0..5] of char;
Begin
Str (WaveSelectColl^.Count:4,out);
SetDlgItemText(HWindow, id_Display,out);
End;
Destructor TScanDlg.Done;
BEGIN
TDialog.Done;
{Dispose(WaveSelectColl, Done);}
End;
end.