home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 1995 May
/
pcw-0595.bin
/
demos
/
databeck
/
wsounds
/
setup.dir
/
wswsrc.exe
/
EVENTDLG.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-12-02
|
15KB
|
463 lines
{ Unit EventDlg - for tracking events }
Unit EventDlg;
INTERFACE
uses WinTypes, WinProcs, WinDos, WObjects, Strings, MMSystem, BWCC, StdWnds,
Win31,DataObj, WaveUtil, WAVEIO, DiskDlg;
TYPE
EventString = RECORD
Name : Array[0..30] of CHAR;
Sound : Integer;
WDInfo : WaveDataType;
END;
const
dn_EventDlg = 'EVENTDlg';
ID_EventLB = 1800;
ID_EventDataLB = 1801;
ID_EventAct = 1802;
ID_ActFile = 1803;
EventCount = 12;
MaxNorm = 4;
HookEvents : Array[0..EventCount-1] of EventString =
((Name:'Close Window'#0; Sound:0),
(Name:'Minimize Window'#0; Sound:0),
(Name:'Restore Window'#0; Sound:0),
(Name:'Open Dialog Box'#0; Sound:0),
(Name:'Move Scroll Bar'#0; Sound:0),
(Name:'Question'#0; Sound:0),
(Name:'Exclamation'#0; Sound:0),
(Name:'Critical Stop'#0; Sound:0),
(Name:'Default Beep'#0; Sound:0),
(Name:'Asterisk'#0; Sound:0),
(Name:'Windows Exit'#0; Sound:0),
(Name:'Windows Start'#0; Sound:0)
);
VAR
EventsActive : Word;
EventFile : File OF EventString;
EventVirgin : array [0..13] of BOOL;
EventFiles : array [0..13,0..255] of char;
type
PEventDlg = ^TEventDlg;
TEventDlg = object(TDialog)
SelectActive : PCheckBox;
EventLB,
EventDataLB : PListBox;
constructor Init(AParent: PWindowsObject;AName: PChar);
PROCEDURE OK(VAR Msg : TMessage);Virtual id_First + id_Ok;
procedure Cancel(var Msg: TMessage); virtual id_First + id_Cancel;
Procedure HandleEventSwitch(VAR Msg : TMessage);virtual id_First + id_EventAct;
procedure HandleEventLB(VAR Msg : TMessage);virtual id_First + id_EventLB;
procedure HandleEventDataLB(VAR Msg : TMessage);virtual id_First + id_EventDataLB;
procedure HandlePlayDB(Var Msg:TMessage);virtual;
Destructor Done;virtual;
procedure SetupWindow; virtual;
end;
Procedure LoadEvents;
Procedure CheckEvents;
PROCEDURE HookInstall(Install: Boolean);
PROCEDURE ReadIniProfiles;
FUNCTION WriteINIProfiles : BOOL;
PROCEDURE ChangeEvent (Idx: Integer; Value: PChar);
implementation
VAR
PWT : PWaveData;
PROCEDURE HookInstall; EXTERNAL 'WswHook';
PROCEDURE ReadIniProfiles; EXTERNAL 'WswHook';
FUNCTION WriteIniProfiles; EXTERNAL 'WswHook';
PROCEDURE ChangeEvent; EXTERNAL 'WswHook';
constructor TEventDlg.Init(AParent: PWindowsObject;AName: PChar);
begin
TDialog.Init(AParent, AName);
SelectActive := New(PCheckBox,InitResource(@self,ID_EventAct));
EventLB := New(PListBox,InitResource(@Self,ID_EventLB));
EventDataLB := New(PListBox, InitResource(@Self, ID_EventDataLB));
end;
procedure TEventDlg.SetupWindow;
VAR
Count : Byte;
Begin
TDialog.SetupWindow;
SelectActive^.SetCheck(EventsActive);
For Count := 0 to EventCount-1 DO EventLB^.AddString(HookEvents[Count].Name);
EventDataLB^.AddString('<no sound>');
WD_InsertAll(WaveCollect, EventDataLB);
EventLB^.SetSelIndex(0);
EventDataLB^.SetSelIndex(0);
SetDlgItemText (HWindow,ID_ActFile,EventFiles[0]);
end;
procedure TEventDlg.HandleEventLB(var Msg: TMessage);
Var
Idx : Integer;
begin
IF (WaveCollect^.Count <= 0) THEN BEGIN
END
ELSE BEGIN
case Msg.LParamHi of
lbn_SelChange, lbn_DblClk:
begin
if Msg.LParamHi = lbn_SelChange then BEGIN
Idx := EventLB^.GetSelIndex;
SetDlgItemText (HWindow,ID_ActFile,EventFiles[Idx]);
if (ord(EventFiles[idx,0])=0) then SetDlgItemText (HWindow,ID_ActFile,'<no sound>');
{ EventDataLB^.SetSelIndex(HookEvents[Idx].Sound);}
IF HookEvents[Idx].Sound = -1 then EventDataLB^.SetSelIndex(0);
END;
if Msg.LParamHi = lbn_DblClk then BEGIN
SndPlaySound (EventFiles[Idx],SND_ASYNC);
END;
end;
end;
END;
end;
procedure TEventDlg.HandleEventDataLB(var Msg: TMessage);
Var
Idx, IdxDB : Integer;
DiskDUmmy : Array[0..255] of char;
begin
IF (WaveCollect^.Count <= 0) THEN BEGIN
END
ELSE BEGIN
case Msg.LParamHi of
lbn_SelChange, lbn_DblClk:
begin
if Msg.LParamHi = lbn_SelChange then BEGIN
IdxDB := EventDataLB^.GetSelIndex;
Idx := EventLB^.GetSelIndex;
IF IdxDB>0 then
Begin
EventVirgin[Idx] := FALSE;
HookEvents[Idx].Sound := IdxDB;
PWT := WaveCollect^.At(IdxDB-1);
Move(PWT^.WD, HookEvents[Idx].WDInfo,SizeOf(PWT^.WD));
PWaveData(WaveCollect^.At(IdxDB-1))^.GetData(WaveDummy);
DiskDummy[0] := WaveDummy.DiskDrive;
DiskDummy[1] := #0;
StrCat(DiskDummy, ':');
StrCat(DiskDummy,WaveDummy.PathName);
StrCat(DiskDummy,WaveDummy.FileName);
StrCopy (EventFiles[Idx],DiskDummy);
{ ChangeEvent (Idx,DiskDummy);}
SetDlgItemText (HWindow,ID_ActFile,DiskDummy);
{ writeln ('Set ',DiskDummy);}
End
Else
Begin
HookEvents[Idx].Sound := -1;
StrCopy (EventFiles[Idx],'');
{ ChangeEvent (Idx,'');}
SetDlgItemText (HWindow,ID_ActFile,'<no sound>');
{ writeln ('Clear');}
End;
END;
if Msg.LParamHi = lbn_DblClk then BEGIN
HandlePlayDB(Msg);
END;
end;
end;
END;
end;
procedure TEventDlg.HandlePlayDB(Var Msg:TMessage);
VAR
Message,IDx,BWCCMes : Integer;
PWTest : PWaveData;
MDummy : Array[0..100] of Char;
BEGIN
{--------------------------------------------------------------------}
{--------------------- Play dialog box ------------------------------}
Message := EventDataLB^.GetSelIndex-1;
IF (Message >= 0) AND (Message < WaveCollect^.Count) THEN
Begin
PWaveData(WaveCollect^.At(Message))^.GetData(WaveDummy);
DPlayObj := New(PDiskPlay,Init(@self));
DPlayObj^.DiskPlayDlg(WaveDummy, Message);
DPlayObj^.Done;
IF (DiskIntoDataBase = TRUE) THEN BEGIN
DiskIntoDataBase := FALSE;
StrCopy(MDummy,'Database changes can only be accessed from the database dialog box');
BWCCMes := BWCCMessageBox(HWindow,MDummy,'Wicked Sounds for Windows: Note',MB_Ok+mb_IconInformation);
END
ELSE BEGIN
END;
DiskDummy[0] := WaveDummy.DiskDrive;
DiskDummy[1] := #0;
StrCat(DiskDummy, ':');
StrCat(DiskDummy,WaveDummy.PathName);
StrCat(DiskDummy,WaveDummy.FileName);
IF Message = idOK THEN sndPlaySound(DiskDummy,SND_Async);
End;
{----------------------------------------------------------------------}
{----------------------------------------------------------------------}
END;
procedure TEventDlg.HandleEventSwitch(var Msg: TMessage);
Var st : array [0..5] of char;
BEGIN
IF (SelectActive^.GetCheck = bf_Unchecked) THEN BEGIN
Str (bf_checked:5,st);
WriteProfileString ('WSW_Captain_Hooks_Log','EventsActive',st);
EventsActive := bf_Checked;
SelectActive^.SetCheck(EventsActive);
HookInstall(TRUE);
END
ELSE BEGIN
EventsActive := bf_UnChecked;
Str (bf_unchecked:5,st);
WriteProfileString ('WSW_Captain_Hooks_Log','EventsActive',st);
SelectActive^.SetCheck(EventsActive);
HookInstall (FALSE);
END;
END;
procedure TEventDlg.Cancel(var Msg: TMessage);
BEGIN
LoadEvents;
TDialog.Cancel(Msg);
END;
PROCEDURE TEventDlg.OK(VAR Msg : TMessage);
VAR
MDummy : Array[0..50] of Char;
Count : Byte;
Sub : Array[0..255] of Char;
BEGIN
{ Assign(EventFile,WF_EVE);}
{$I-}
{ ReWrite(EventFile);}
{$I+}
{ IF IOResult = 0 THEN BEGIN
FOR Count := 0 to EventCount-1 DO
Begin
Write(EventFile,HookEvents[Count]);
Close(EventFile);
End;
END}
For Count := 0 to MaxNorm do
Begin
WriteProfileString ('WSW_Extended_Sounds',HookEvents[Count].Name,EventFiles[Count]);
ChangeEvent (Count,EventFIles[count]);
End;
StrCopy (sub,EventFiles[MaxNorm+1]);
StrCat (sub,',Question');
WriteProfileString ('Sounds','SystemQuestion',sub);
StrCopy (sub,EventFiles[MaxNorm+2]);
StrCat (sub,',Exclamation');
WriteProfileString ('Sounds','SystemExclamation',sub);
StrCopy (sub,EventFiles[MaxNorm+3]);
StrCat (sub,',Critical Stop');
WriteProfileString ('Sounds','SystemHand',sub);
StrCopy (sub,EventFiles[MaxNorm+4]);
StrCat (sub,',Default Beep');
WriteProfileString ('Sounds','SystemDefault',sub);
StrCopy (sub,EventFiles[MaxNorm+5]);
StrCat (sub,',Asterisk');
WriteProfileString ('Sounds','SystemAsterisk',sub);
StrCopy (sub,EventFiles[MaxNorm+6]);
StrCat (sub,',Windows Exit');
WriteProfileString ('Sounds','SystemExit',sub);
StrCopy (sub,EventFiles[MaxNorm+7]);
StrCat (sub,',Windows Start');
WriteProfileString ('Sounds','SystemStart',sub);
WriteProfileString (NIL,NIL,NIL); { Flush INI buffer }
SendMessage (HWND_BROADCAST,WM_WININICHANGE,0,0); { Indicate that WIN.INI has changed }
{ ELSE BEGIN
StrCopy(MDummy,'Info file write error');
BWCCMessageBox(HWindow,MDummy,'Wicked Sounds for Windows: Note',MB_Ok+ MB_IconStop);
END;}
TDialog.OK(Msg);
END;
Destructor TEventDlg.Done;
BEGIN
Dispose(SelectActive,Done);
Dispose(EventLB,Done);
Dispose(EventDataLB,Done);
{ IF EventsActive = bf_Unchecked THEN HookInstall(FALSE)
ELse HookInstall(True);}
TDialog.Done;
END;
Procedure Extract (Nr : Integer);
Var SubString : Array [0..255] of char;
i : Integer;
Begin
for i:= 0 to 254 do SubString[i] := #0;
i:=0;
while (EventFiles[Nr,i]<>',') do
Begin
Substring [i] := EventFiles[Nr,i];
Inc(i,1);
End;
Substring[i+1]:= #0;
StrCopy (EventFiles[nr],Substring);
End;
Procedure LoadEvents;
VAR
ECount : Byte;
MainIdx: Integer;
Message: Integer;
DiskDummy: Array[0..255] of char;
BEGIN
for ECount := 0 to MaxNorm do
Begin
GetProfileString ('WSW_Extended_Sounds',HookEvents[ECount].Name,'SYSTEMDEFAULT',@EventFiles[ECount],199);
ChangeEvent (ECount,EventFiles[ECount]);
End;
GetProfileString ('sounds','SystemQuestion','SYSTEMDEFAULT',@EventFiles[ECount+1],199);
Extract (ECount+1);
GetProfileString ('sounds','SystemExclamation','SYSTEMDEFAULT',@EventFiles[ECount+2],199);
Extract (ECount+2);
GetProfileString ('sounds','SystemHand','SYSTEMDEFAULT',@EventFiles[ECount+3],199);
Extract (ECount+3);
GetProfileString ('sounds','SystemDefault','SYSTEMDEFAULT',@EventFiles[ECount+4],199);
Extract (ECount+4);
GetProfileString ('sounds','SystemAsterisk','SYSTEMDEFAULT',@EventFiles[ECount+5],199);
Extract (ECount+5);
GetProfileString ('sounds','SystemExit','SYSTEMDEFAULT',@EventFiles[ECount+6],199);
Extract (ECount+6);
GetProfileString ('sounds','SystemStart','SYSTEMDEFAULT',@EventFiles[ECount+7],199);
Extract (ECount+7);
{ IF Exists(WF_EVE) THEN BEGIN
Assign(EventFile,WF_EVE); }
{$I-}
{ ReSet(EventFile);}
{$I+}
{ IF IOResult = 0 THEN BEGIN
FOR ECount := 0 to EventCount-1 DO BEGIN
Read(EventFile,HookEvents[ECount]);
EventVirgin[ECount] := TRUE;
Message := HookEvents[ECount].Sound-1;
IF (Message > 0) AND (Message < WaveCollect^.Count) THEN
Begin
PWaveData(WaveCollect^.At(Message))^.GetData(WaveDummy);
DiskDummy[0] := WaveDummy.DiskDrive;
DiskDummy[1] := #0;
StrCat(DiskDummy, ':');
StrCat(DiskDummy,WaveDummy.PathName);
StrCat(DiskDummy,WaveDummy.FileName);
ChangeEvent (ECount,DiskDummy);}
{ writeln ('Set ',DiskDummy);}
{ End;
IF Message<1 then
Begin
ChangeEvent (ECount,'');}
{ writeln ('Clear');}
{ End;
PWT := New(PWaveData,Init(HookEvents[ECount].WDInfo));
IF WaveCollect^.Search(PWT,MainIdx) = False THEN HookEvents[ECount].Sound := 0;
Dispose(PWT,Done);
END;
Close(EventFile);
END
END;}
END;
Procedure CheckEvents;
{Make sure whether file is still in database, or whether position should be changed}
VAR
ECount : Byte;
EvChanged : BOOLEAN;
MainIdx: Integer;
Message: Integer;
Count : Integer;
DiskDummy: Array[0..255] of char;
BEGIN
EvChanged := False;
FOR ECount := 0 to EventCount-1 DO BEGIN
{Read Sound number}
Message := HookEvents[ECount].Sound;
{Sound number = No sound}
IF Message<1 then Begin
ChangeEvent (ECount,'');
HookEvents[ECount].Sound := -1;
EvChanged := TRUE;
End
{Sound number missing}
ELSE BEGIN
PWT := New(PWaveData,Init(HookEvents[ECount].WDInfo));
WriteLn('Hmm, Name : ',PWT^.WD.FileName);
{Sound not found in database}
IF WaveCollect^.Search(PWT,MainIdx) = False THEN BEGIN
HookEvents[ECount].Sound := -1;
ChangeEvent (ECount,'');
EvChanged := TRUE;
WriteLn('not a sound');
END
ELSE BEGIN
{Sound number passed to database when needed}
IF (MainIdx <> HookEvents[ECount].Sound-1) THEN BEGIN
WriteLn('Find new sound');
WriteLn('Old : ',HookEvents[ECount].Sound);
HookEvents[ECount].Sound:= MainIdx+1;
WriteLn('New : ',HookEvents[ECount].Sound);
PWaveData(WaveCollect^.At(MainIdx))^.GetData(WaveDummy);
DiskDummy[0] := WaveDummy.DiskDrive;
DiskDummy[1] := #0;
StrCat(DiskDummy, ':');
StrCat(DiskDummy,WaveDummy.PathName);
StrCat(DiskDummy,WaveDummy.FileName);
ChangeEvent (ECount,DiskDummy);
EvChanged := TRUE;
END;
END;
Dispose(PWT,Done);
END;
END;
IF EvChanged THEN BEGIN
Assign(EventFile,WF_EVE);
{$I-}
ReWrite(EventFile);
{$I+}
IF IOResult = 0 THEN BEGIN
FOR Count := 0 to EventCount-1 DO Write(EventFile,HookEvents[Count]);
Close(EventFile);
END;
END;
END;
BEGIN
EventsActive := bf_Unchecked;
ReadIniProfiles;
LoadEvents;
END.