3.08
git-svn-id: https://svn.code.sf.net/p/kolmck/code@103 91bb2d04-0c0c-4d2d-88a5-bbb6f4c1fa07
This commit is contained in:
@ -256,7 +256,7 @@ That is all to have full compatibility.
|
|||||||
|
|
||||||
//{$DEFINE TEST_VERSION}
|
//{$DEFINE TEST_VERSION}
|
||||||
{$IFNDEF _D6orHigher}
|
{$IFNDEF _D6orHigher}
|
||||||
{$DEFINE PARANOIA} //seems not needed under D6 !!! Inprise fixed this, finally...
|
{$DEFINE PARANOIA} //seems not needed from D6 !!! Inprise fixed this, finally...
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
@ -264,6 +264,7 @@ That is all to have full compatibility.
|
|||||||
{$DEFINE USE_FLAGS}
|
{$DEFINE USE_FLAGS}
|
||||||
{$ELSE} {$UNDEF USE_FLAGS}
|
{$ELSE} {$UNDEF USE_FLAGS}
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
{$IFnDEF EVENTS_STATIC}
|
{$IFnDEF EVENTS_STATIC}
|
||||||
{$DEFINE EVENTS_DYNAMIC}
|
{$DEFINE EVENTS_DYNAMIC}
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -275,4 +276,5 @@ That is all to have full compatibility.
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$DEFINE KOL3XX}
|
||||||
{$DEFINE DIBPixels32bitWithAlpha}
|
{$DEFINE DIBPixels32bitWithAlpha}
|
@ -111,6 +111,7 @@ type
|
|||||||
procedure CreateDialogForm;
|
procedure CreateDialogForm;
|
||||||
property _FindFirstFileEx: TFindFirstFileEx read GetFindFirstFileEx;
|
property _FindFirstFileEx: TFindFirstFileEx read GetFindFirstFileEx;
|
||||||
function _FindFirstFileExW: Boolean;
|
function _FindFirstFileExW: Boolean;
|
||||||
|
procedure SelChanged( Sender: PObj );
|
||||||
procedure DeleteNode( node: Integer );
|
procedure DeleteNode( node: Integer );
|
||||||
procedure DestroyingForm( Sender: PObj );
|
procedure DestroyingForm( Sender: PObj );
|
||||||
public
|
public
|
||||||
@ -449,9 +450,6 @@ begin
|
|||||||
BtnPanel.Border := 2;
|
BtnPanel.Border := 2;
|
||||||
DTSubPanel.SetAlign( caClient );
|
DTSubPanel.SetAlign( caClient );
|
||||||
DirTree := NewTreeView( DTSubPanel, [ tvoLinesRoot ], Sysimages, nil );
|
DirTree := NewTreeView( DTSubPanel, [ tvoLinesRoot ], Sysimages, nil );
|
||||||
{$IFNDEF DIRDLGEX_NO_DBLCLK_ON_NODE_OK}
|
|
||||||
DirTree.OnMouseDblClk := DoubleClick;
|
|
||||||
{$ENDIF}
|
|
||||||
DirTree.Color := clWindow;
|
DirTree.Color := clWindow;
|
||||||
DirTree.OnTVExpanding := DoExpanding;
|
DirTree.OnTVExpanding := DoExpanding;
|
||||||
DirTree.SetAlign( caClient );
|
DirTree.SetAlign( caClient );
|
||||||
@ -483,7 +481,11 @@ begin
|
|||||||
DirTree.SetAlign( caClient );
|
DirTree.SetAlign( caClient );
|
||||||
MsgPanel := DlgClient;
|
MsgPanel := DlgClient;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
{$IFNDEF DIRDLGEX_NO_DBLCLK_ON_NODE_OK}
|
||||||
|
DirTree.OnMouseDblClk := DoubleClick;
|
||||||
|
{$ENDIF}
|
||||||
MsgPanel.OnMessage := DoMsg;
|
MsgPanel.OnMessage := DoMsg;
|
||||||
|
DirTree.OnSelChange := SelChanged;
|
||||||
DlgClient := DTSubPanel; // !!!
|
DlgClient := DTSubPanel; // !!!
|
||||||
s := CancelCaption; if s = '' then s := 'Cancel';
|
s := CancelCaption; if s = '' then s := 'Cancel';
|
||||||
BtCancel := NewButton( BtnPanel, s );
|
BtCancel := NewButton( BtnPanel, s );
|
||||||
@ -862,6 +864,11 @@ var s, CurPath: String;
|
|||||||
begin
|
begin
|
||||||
s := IncludeTrailingPathDelimiter(
|
s := IncludeTrailingPathDelimiter(
|
||||||
PChar( PControl( Sender ).CustomData ) );
|
PChar( PControl( Sender ).CustomData ) );
|
||||||
|
if PControl( Sender ).RightClick then
|
||||||
|
begin
|
||||||
|
RemoveLink( s );
|
||||||
|
end else
|
||||||
|
begin
|
||||||
if DirectoryExists( s ) then
|
if DirectoryExists( s ) then
|
||||||
begin
|
begin
|
||||||
CurPath := IncludeTrailingPathDelimiter(
|
CurPath := IncludeTrailingPathDelimiter(
|
||||||
@ -870,6 +877,7 @@ begin
|
|||||||
Form.ModalResult := 1
|
Form.ModalResult := 1
|
||||||
else Path := s;
|
else Path := s;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TOpenDirDialogEx.LinkPresent(const s: KOLString): Boolean;
|
function TOpenDirDialogEx.LinkPresent(const s: KOLString): Boolean;
|
||||||
@ -976,7 +984,8 @@ begin
|
|||||||
Pn.Free;
|
Pn.Free;
|
||||||
LinksList.Delete( i );
|
LinksList.Delete( i );
|
||||||
end;
|
end;
|
||||||
Global_Align( LinksTape );
|
//LinksTape.Height := LinksTape.Height + 1;
|
||||||
|
//LinksTape.Height := LinksTape.Height - 1;
|
||||||
SetupLinksTapeHeight;
|
SetupLinksTapeHeight;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1232,6 +1241,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
{$IFDEF DIRDLGEX_LINKSPANEL}
|
{$IFDEF DIRDLGEX_LINKSPANEL}
|
||||||
|
procedure TOpenDirDialogEx.SelChanged(Sender: PObj);
|
||||||
|
var n: Integer;
|
||||||
|
begin
|
||||||
|
n := PControl(Sender).TVSelected;
|
||||||
|
RescanNode( n );
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TOpenDirDialogEx.SetLinks(idx: Integer; const Value: KOLString);
|
procedure TOpenDirDialogEx.SetLinks(idx: Integer; const Value: KOLString);
|
||||||
var Bar, Pn: PControl;
|
var Bar, Pn: PControl;
|
||||||
Bmp: PBitmap;
|
Bmp: PBitmap;
|
||||||
@ -1278,7 +1294,7 @@ begin
|
|||||||
{$ENDIF USE_GRUSH}
|
{$ENDIF USE_GRUSH}
|
||||||
{$ENDIF DIRDLGEX_BIGGERPANEL}
|
{$ENDIF DIRDLGEX_BIGGERPANEL}
|
||||||
NewPanelWithSingleButtonToolbar( LinksTape, LinksBox.Width-8,
|
NewPanelWithSingleButtonToolbar( LinksTape, LinksBox.Width-8,
|
||||||
H, caTop, Bmp,
|
H, caNone, Bmp,
|
||||||
ExtractFileName( s ), s, Pn, Bar, LinkClick, nil, nil, LinksBtnDnEvt, LinksPopupMenu );
|
ExtractFileName( s ), s, Pn, Bar, LinkClick, nil, nil, LinksBtnDnEvt, LinksPopupMenu );
|
||||||
Pn.CreateWindow;
|
Pn.CreateWindow;
|
||||||
|
|
||||||
@ -1317,13 +1333,18 @@ end;
|
|||||||
procedure TOpenDirDialogEx.SetupLinksTapeHeight;
|
procedure TOpenDirDialogEx.SetupLinksTapeHeight;
|
||||||
var H: Integer;
|
var H: Integer;
|
||||||
Pn: PControl;
|
Pn: PControl;
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
H := 0;
|
H := 0;
|
||||||
if (LinksList <> nil) and (LinksList.Count > 0) then
|
if (LinksList <> nil) and (LinksList.Count > 0) then
|
||||||
begin
|
begin
|
||||||
Pn := Pointer( LinksList.Objects[ LinksList.Count-1 ] );
|
for i := 0 to LinksList.Count-1 do
|
||||||
|
begin
|
||||||
|
Pn := Pointer( LinksList.Objects[ i ] );
|
||||||
|
Pn.Top := H;
|
||||||
H := Pn.Top + Pn.Height;
|
H := Pn.Top + Pn.Height;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
LinksTape.Height := H + 4;
|
LinksTape.Height := H + 4;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
66
KOL_ASM.inc
66
KOL_ASM.inc
@ -1,6 +1,6 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// KOL_ASM.inc ()to be inlude in KOL.pas)
|
// KOL_ASM.inc ()to be inlude in KOL.pas)
|
||||||
// v 3.05
|
// v 3.08
|
||||||
|
|
||||||
function MsgBox( const S: KOLString; Flags: DWORD ): DWORD;
|
function MsgBox( const S: KOLString; Flags: DWORD ): DWORD;
|
||||||
asm
|
asm
|
||||||
@ -1675,16 +1675,17 @@ end;
|
|||||||
procedure TCanvas.SetHandle(Value: HDC);
|
procedure TCanvas.SetHandle(Value: HDC);
|
||||||
asm
|
asm
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
MOV EBX, EAX
|
PUSH ESI
|
||||||
MOV ECX, [EBX].fHandle
|
MOV ESI, EDX // ESI = Value
|
||||||
CMP ECX, EDX
|
MOV EBX, EAX // EAX = @ Self
|
||||||
JZ @@exit
|
MOV ECX, [EBX].fHandle // ECX = fHandle (before)
|
||||||
JECXZ @@chk_val
|
CMP ECX, ESI // compare with new Value in EDX
|
||||||
|
JZ @@exit // equal? -> nothing to do
|
||||||
|
JECXZ @@chk_val // fHandle = 0? -> check new value in EDX
|
||||||
|
|
||||||
PUSH EDX
|
PUSH ECX // fHandle
|
||||||
PUSH ECX
|
|
||||||
CALL DeselectHandles
|
CALL DeselectHandles
|
||||||
POP EDX
|
POP EDX // fHandle
|
||||||
|
|
||||||
MOV ECX, [EBX].fOwnerControl
|
MOV ECX, [EBX].fOwnerControl
|
||||||
JECXZ @@chk_Release
|
JECXZ @@chk_Release
|
||||||
@ -1692,13 +1693,16 @@ asm
|
|||||||
JE @@clr_Handle
|
JE @@clr_Handle
|
||||||
|
|
||||||
@@chk_Release:
|
@@chk_Release:
|
||||||
PUSH EDX
|
|
||||||
CMP [EBX].fOnGetHandle.TMethod.Code, offset[TControl.DC2Canvas]
|
CMP [EBX].fOnGetHandle.TMethod.Code, offset[TControl.DC2Canvas]
|
||||||
JNE @@deldc
|
JNE @@deldc
|
||||||
|
PUSH EDX // fHandle
|
||||||
PUSH [ECX].TControl.fHandle
|
PUSH [ECX].TControl.fHandle
|
||||||
CALL ReleaseDC
|
CALL ReleaseDC
|
||||||
JMP @@clr_Handle
|
JMP @@clr_Handle
|
||||||
@@deldc:
|
@@deldc:
|
||||||
|
CMP WORD PTR [EBX].fIsPaintDC, 0
|
||||||
|
JNZ @@clr_Handle
|
||||||
|
PUSH EDX // fHandle
|
||||||
CALL DeleteDC
|
CALL DeleteDC
|
||||||
|
|
||||||
@@clr_Handle:
|
@@clr_Handle:
|
||||||
@ -1707,18 +1711,18 @@ asm
|
|||||||
MOV [EBX].TCanvas.fIsPaintDC, CL
|
MOV [EBX].TCanvas.fIsPaintDC, CL
|
||||||
AND [EBX].TCanvas.fState, not HandleValid
|
AND [EBX].TCanvas.fState, not HandleValid
|
||||||
|
|
||||||
POP EDX
|
|
||||||
@@chk_val:
|
@@chk_val:
|
||||||
TEST EDX, EDX
|
TEST ESI, ESI
|
||||||
JZ @@exit
|
JZ @@exit
|
||||||
|
|
||||||
OR [EBX].TCanvas.fState, HandleValid
|
OR [EBX].TCanvas.fState, HandleValid
|
||||||
MOV [EBX].TCanvas.fHandle, EDX
|
MOV [EBX].TCanvas.fHandle, ESI
|
||||||
LEA EDX, [EBX].TCanvas.fPenPos
|
LEA EDX, [EBX].TCanvas.fPenPos
|
||||||
MOV EAX, EBX
|
MOV EAX, EBX
|
||||||
CALL SetPenPos
|
CALL SetPenPos
|
||||||
|
|
||||||
@@exit: POP EBX
|
@@exit: POP ESI
|
||||||
|
POP EBX
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCanvas.SetPenPos(const Value: TPoint);
|
procedure TCanvas.SetPenPos(const Value: TPoint);
|
||||||
@ -2854,6 +2858,10 @@ end;
|
|||||||
|
|
||||||
function TDirList.GetCount: Integer;
|
function TDirList.GetCount: Integer;
|
||||||
asm
|
asm
|
||||||
|
{CMP EAX, 0
|
||||||
|
JNZ @@1
|
||||||
|
NOP
|
||||||
|
@@1: }
|
||||||
MOV ECX, [EAX].FListPositions
|
MOV ECX, [EAX].FListPositions
|
||||||
JECXZ @@retECX
|
JECXZ @@retECX
|
||||||
MOV ECX, [ECX].TList.fCount
|
MOV ECX, [ECX].TList.fCount
|
||||||
@ -5419,7 +5427,7 @@ asm //cmd //opd
|
|||||||
@@callonmes:
|
@@callonmes:
|
||||||
{$IFDEF NIL_EVENTS}
|
{$IFDEF NIL_EVENTS}
|
||||||
TEST EBX, EBX
|
TEST EBX, EBX
|
||||||
JZ @@exit // @@dynmes1
|
JZ @@ret
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@@onmess1:
|
@@onmess1:
|
||||||
PUSH 0
|
PUSH 0
|
||||||
@ -5914,7 +5922,8 @@ end;
|
|||||||
|
|
||||||
function TControl.GetVisible: Boolean;
|
function TControl.GetVisible: Boolean;
|
||||||
asm
|
asm
|
||||||
MOV ECX, [EAX].fHandle
|
//CALL UpdateWndStyles
|
||||||
|
{MOV ECX, [EAX].fHandle
|
||||||
JECXZ @@check_fStyle
|
JECXZ @@check_fStyle
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
PUSH ECX
|
PUSH ECX
|
||||||
@ -5922,9 +5931,9 @@ asm
|
|||||||
TEST EAX, EAX
|
TEST EAX, EAX
|
||||||
POP EAX
|
POP EAX
|
||||||
JMP @@checked // Z if not visible
|
JMP @@checked // Z if not visible
|
||||||
|
}
|
||||||
@@check_fStyle:
|
@@check_fStyle:
|
||||||
TEST byte ptr [EAX].fStyle.f3_Style, F3_Visible // WS_VISIBLE shr 3
|
TEST byte ptr [EAX].fStyle.f3_Style, 1 shl F3_Visible // WS_VISIBLE shr 3
|
||||||
@@checked:
|
@@checked:
|
||||||
{$IFDEF USE_FLAGS}
|
{$IFDEF USE_FLAGS}
|
||||||
SETNZ AL
|
SETNZ AL
|
||||||
@ -6548,6 +6557,7 @@ asm
|
|||||||
MOV ESI, EAX
|
MOV ESI, EAX
|
||||||
|
|
||||||
CALL GetEnabled
|
CALL GetEnabled
|
||||||
|
(*
|
||||||
{$IFDEF USE_FLAGS}
|
{$IFDEF USE_FLAGS}
|
||||||
MOV DL, byte ptr [ESI].TControl.fStyle.f2_Style
|
MOV DL, byte ptr [ESI].TControl.fStyle.f2_Style
|
||||||
// F2_Tabstop = 0 !
|
// F2_Tabstop = 0 !
|
||||||
@ -6556,6 +6566,8 @@ asm
|
|||||||
OR DL, [ESI].TControl.fTabstop
|
OR DL, [ESI].TControl.fTabstop
|
||||||
{$ENDIF USE_FLAGS}
|
{$ENDIF USE_FLAGS}
|
||||||
AND AL, DL
|
AND AL, DL
|
||||||
|
*)
|
||||||
|
TEST AL, AL
|
||||||
JZ @@exit
|
JZ @@exit
|
||||||
|
|
||||||
INC [ESI].TControl.fClickDisabled
|
INC [ESI].TControl.fClickDisabled
|
||||||
@ -9392,6 +9404,8 @@ asm
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@@01:
|
@@01:
|
||||||
MOV EAX, [EAX].fList
|
MOV EAX, [EAX].fList
|
||||||
|
TEST EAX, EAX
|
||||||
|
JZ @@exit
|
||||||
MOV EDX, [EAX].TList.fCount
|
MOV EDX, [EAX].TList.fCount
|
||||||
CMP EDX, 1
|
CMP EDX, 1
|
||||||
JLE @@02
|
JLE @@02
|
||||||
@ -9407,6 +9421,7 @@ asm
|
|||||||
@1: MOV EDX, [EAX].fCount
|
@1: MOV EDX, [EAX].fCount
|
||||||
CALL SortData
|
CALL SortData
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
@@exit:
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TStrList.MergeFromFile(const FileName: KOLString);
|
procedure TStrList.MergeFromFile(const FileName: KOLString);
|
||||||
@ -11370,10 +11385,12 @@ asm
|
|||||||
LOOP @@ret_Canvas
|
LOOP @@ret_Canvas
|
||||||
|
|
||||||
MOV [EBX].fApplyBkColor2Canvas, offset[ApplyBitmapBkColor2Canvas]
|
MOV [EBX].fApplyBkColor2Canvas, offset[ApplyBitmapBkColor2Canvas]
|
||||||
PUSH 0
|
//CALL CreateCompatibleDC
|
||||||
CALL CreateCompatibleDC
|
XOR EAX, EAX
|
||||||
|
//PUSH EAX
|
||||||
CALL NewCanvas
|
CALL NewCanvas
|
||||||
MOV [EBX].fCanvas, EAX
|
MOV [EBX].fCanvas, EAX
|
||||||
|
//MOV [EAX].TCanvas.fIsAlienDC, 0
|
||||||
MOV [EAX].TCanvas.fOnChangeCanvas.TMethod.Code, offset[CanvasChanged]
|
MOV [EAX].TCanvas.fOnChangeCanvas.TMethod.Code, offset[CanvasChanged]
|
||||||
MOV [EAX].TCanvas.fOnChangeCanvas.TMethod.Data, EBX
|
MOV [EAX].TCanvas.fOnChangeCanvas.TMethod.Data, EBX
|
||||||
CALL TCanvas.GetBrush
|
CALL TCanvas.GetBrush
|
||||||
@ -13912,6 +13929,15 @@ asm
|
|||||||
MOV [EAX].TControl.fWordWrap, 1
|
MOV [EAX].TControl.fWordWrap, 1
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
AND byte ptr[EAX].TControl.fStyle.f0_Style, not SS_LEFTNOWORDWRAP
|
AND byte ptr[EAX].TControl.fStyle.f0_Style, not SS_LEFTNOWORDWRAP
|
||||||
|
|
||||||
|
{$IFDEF USE_FLAGS}
|
||||||
|
TEST [EAX].TControl.fFlagsG5, 1 shl G5_IsButton
|
||||||
|
{$ELSE}
|
||||||
|
CMP [EAX].TControl.fIsButton, 0
|
||||||
|
{$ENDIF}
|
||||||
|
JZ @@1
|
||||||
|
OR [EAX].TControl.fStyle.f1_Style, $20 // BS_MULTILINE >> 8
|
||||||
|
@@1:
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
MOV EDX, [EAX].TControl.fStyle
|
MOV EDX, [EAX].TControl.fStyle
|
||||||
CALL TControl.SetStyle
|
CALL TControl.SetStyle
|
||||||
|
81
KOLadd.pas
81
KOLadd.pas
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
//[VERSION]
|
//[VERSION]
|
||||||
****************************************************************
|
****************************************************************
|
||||||
* VERSION 3.05
|
* VERSION 3.05+
|
||||||
****************************************************************
|
****************************************************************
|
||||||
//[END OF VERSION]
|
//[END OF VERSION]
|
||||||
|
|
||||||
@ -433,11 +433,16 @@ type
|
|||||||
TDirChange = object(TObj)
|
TDirChange = object(TObj)
|
||||||
{* Object type to monitor changes in certain folder. }
|
{* Object type to monitor changes in certain folder. }
|
||||||
protected
|
protected
|
||||||
|
{$IFDEF DIRCHG_ONEXECUTE}
|
||||||
|
FOnExecute: TOnEvent;
|
||||||
|
{$ENDIF}
|
||||||
FOnChange: TOnDirChange;
|
FOnChange: TOnDirChange;
|
||||||
FHandle, FinEvent: THandle;
|
FHandle, FinEvent: THandle;
|
||||||
FPath: KOLString;
|
FPath: KOLString;
|
||||||
FMonitor: PThread;
|
FMonitor: PThread;
|
||||||
|
FWatchSubtree: Boolean;
|
||||||
FDestroying: Boolean;
|
FDestroying: Boolean;
|
||||||
|
FFlags: DWORD;
|
||||||
function Execute( Sender: PThread ): Integer;
|
function Execute( Sender: PThread ): Integer;
|
||||||
procedure Changed;
|
procedure Changed;
|
||||||
protected
|
protected
|
||||||
@ -450,10 +455,15 @@ type
|
|||||||
{* Path to monitored folder (to a root, if tree of folders
|
{* Path to monitored folder (to a root, if tree of folders
|
||||||
is under monitoring). }
|
is under monitoring). }
|
||||||
property OnChange: TOnDirChange read FOnChange write FOnChange;
|
property OnChange: TOnDirChange read FOnChange write FOnChange;
|
||||||
|
{$IFDEF DIRCHG_ONEXECUTE}
|
||||||
|
property OnExecute: TOnEvent read FOnExecute write FOnExecute;
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function NewDirChangeNotifier( const Path: KOLString; Filter: TFileChangeFilter;
|
function NewDirChangeNotifier( const Path: KOLString; Filter: TFileChangeFilter;
|
||||||
WatchSubtree: Boolean; ChangeProc: TOnDirChange )
|
WatchSubtree: Boolean; ChangeProc: TOnDirChange
|
||||||
|
{$IFDEF DIRCHG_ONEXECUTE} ; OnExecuteProc: TOnEvent
|
||||||
|
{$ENDIF} )
|
||||||
: PDirChange;
|
: PDirChange;
|
||||||
{* Creates notification object TDirChange. If something wrong (e.g.,
|
{* Creates notification object TDirChange. If something wrong (e.g.,
|
||||||
passed directory does not exist), nil is returned as a result. When change
|
passed directory does not exist), nil is returned as a result. When change
|
||||||
@ -1006,7 +1016,7 @@ begin
|
|||||||
if FromIdx + N > FromBits.Count then
|
if FromIdx + N > FromBits.Count then
|
||||||
N := FromBits.Count - FromIdx;
|
N := FromBits.Count - FromIdx;
|
||||||
Capacity := (ToIdx + N + 8) div 8;
|
Capacity := (ToIdx + N + 8) div 8;
|
||||||
NewCount := Max( Count, ToIdx + N - 1 );
|
NewCount := Max( Count, ToIdx + N );
|
||||||
fCount := Max( NewCount, fCount );
|
fCount := Max( NewCount, fCount );
|
||||||
PBitsList( fList ).fCount := (Capacity + 3) div 4;
|
PBitsList( fList ).fCount := (Capacity + 3) div 4;
|
||||||
while ToIdx and $1F <> 0 do
|
while ToIdx and $1F <> 0 do
|
||||||
@ -1186,6 +1196,8 @@ begin
|
|||||||
MOV D, EAX
|
MOV D, EAX
|
||||||
end {$IFDEF F_P} [ 'EAX' ] {$ENDIF};
|
end {$IFDEF F_P} [ 'EAX' ] {$ENDIF};
|
||||||
Result := I * 32 + Integer( D );
|
Result := I * 32 + Integer( D );
|
||||||
|
if Result >= fCount then
|
||||||
|
Result := -1;
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1271,7 +1283,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
//[procedure TBits.SetBit]
|
//[procedure TBits.SetBit]
|
||||||
{$IFDEF ASM_VERSION}
|
{$IFDEF ASM_noVERSION}
|
||||||
procedure TBits.SetBit(Idx: Integer; const Value: Boolean);
|
procedure TBits.SetBit(Idx: Integer; const Value: Boolean);
|
||||||
asm
|
asm
|
||||||
PUSH EBX
|
PUSH EBX
|
||||||
@ -1296,6 +1308,7 @@ asm
|
|||||||
PUSH EDX
|
PUSH EDX
|
||||||
INC EDX
|
INC EDX
|
||||||
PUSH EAX
|
PUSH EAX
|
||||||
|
MOV EAX, EBX
|
||||||
CALL SetCapacity
|
CALL SetCapacity
|
||||||
POP EAX
|
POP EAX
|
||||||
POP EDX
|
POP EDX
|
||||||
@ -1319,12 +1332,14 @@ procedure TBits.SetBit(Idx: Integer; const Value: Boolean);
|
|||||||
var Msk: DWORD;
|
var Msk: DWORD;
|
||||||
MinListCount: Integer;
|
MinListCount: Integer;
|
||||||
begin
|
begin
|
||||||
MinListCount := (Idx + 31) shr 5 + 1;
|
MinListCount := //(Idx + 31) shr 5 + 1;
|
||||||
|
(Idx + 32) shr 5;
|
||||||
if PBitsList( fList ).fCount < MinListCount then
|
if PBitsList( fList ).fCount < MinListCount then
|
||||||
begin
|
begin
|
||||||
PBitsList( fList ).fCount := MinListCount;
|
PBitsList( fList ).fCount := MinListCount;
|
||||||
if Idx >= Capacity then
|
if Idx >= Capacity then
|
||||||
Capacity := Idx + 1;
|
Capacity := //Idx + 1;
|
||||||
|
MinListCount shl 5;
|
||||||
end;
|
end;
|
||||||
Msk := 1 shl (Idx and $1F);
|
Msk := 1 shl (Idx and $1F);
|
||||||
if Value then
|
if Value then
|
||||||
@ -2260,30 +2275,26 @@ asm
|
|||||||
end;
|
end;
|
||||||
{$ELSE ASM_VERSION} //Pascal
|
{$ELSE ASM_VERSION} //Pascal
|
||||||
function NewDirChangeNotifier( const Path: KOLString; Filter: TFileChangeFilter;
|
function NewDirChangeNotifier( const Path: KOLString; Filter: TFileChangeFilter;
|
||||||
WatchSubtree: Boolean; ChangeProc: TOnDirChange )
|
WatchSubtree: Boolean; ChangeProc: TOnDirChange
|
||||||
|
{$IFDEF DIRCHG_ONEXECUTE}; OnExecuteProc: TOnEvent
|
||||||
|
{$ENDIF} )
|
||||||
: PDirChange;
|
: PDirChange;
|
||||||
var Flags: DWORD;
|
|
||||||
begin
|
begin
|
||||||
New( Result, Create );
|
New( Result, Create );
|
||||||
|
{$IFDEF DIRCHG_ONEXECUTE}
|
||||||
|
Result.OnExecute := OnExecuteProc;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
Result.FPath := Path;
|
Result.FPath := Path;
|
||||||
|
Result.FWatchSubtree := WatchSubtree;
|
||||||
Result.FOnChange := ChangeProc;
|
Result.FOnChange := ChangeProc;
|
||||||
if Filter = [ ] then
|
if Filter = [ ] then
|
||||||
Flags := FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME or
|
Result.FFlags := FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME or
|
||||||
FILE_NOTIFY_CHANGE_ATTRIBUTES or FILE_NOTIFY_CHANGE_SIZE or
|
FILE_NOTIFY_CHANGE_ATTRIBUTES or FILE_NOTIFY_CHANGE_SIZE or
|
||||||
FILE_NOTIFY_CHANGE_LAST_WRITE
|
FILE_NOTIFY_CHANGE_LAST_WRITE
|
||||||
else
|
else
|
||||||
Flags := MakeFlags( @Filter, FilterFlags );
|
Result.FFlags := MakeFlags( @Filter, FilterFlags );
|
||||||
Result.FinEvent := CreateEvent( nil, TRUE, FALSE, nil );
|
|
||||||
Result.FHandle := FindFirstChangeNotification(PKOLChar(Result.FPath),
|
|
||||||
Bool( Integer( WatchSubtree ) ), Flags);
|
|
||||||
if Result.FHandle <> INVALID_HANDLE_VALUE then
|
|
||||||
Result.FMonitor := NewThreadEx( Result.Execute )
|
Result.FMonitor := NewThreadEx( Result.Execute )
|
||||||
else //MsgOK( 'Can not monitor ' + Result.FPath + #13'Error ' + Int2Str( GetLastError ) );
|
|
||||||
begin
|
|
||||||
Result.Free;
|
|
||||||
Result := nil;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
{$ENDIF ASM_VERSION}
|
{$ENDIF ASM_VERSION}
|
||||||
//[END _NewDirChgNotifier]
|
//[END _NewDirChgNotifier]
|
||||||
@ -2342,12 +2353,15 @@ begin
|
|||||||
OnChange := nil;
|
OnChange := nil;
|
||||||
SetEvent( FinEvent );
|
SetEvent( FinEvent );
|
||||||
end;
|
end;
|
||||||
if FMonitor <> nil then
|
while FinEvent <> 0 do
|
||||||
begin
|
begin
|
||||||
FMonitor.WaitFor;
|
if Applet <> nil then
|
||||||
FMonitor.Free;
|
Applet.ProcessMessages; // otherwise deadlock is possible !!!
|
||||||
|
Sleep( 1 ); // otherwise processor load can be too high !!!
|
||||||
|
if AppletTerminated then
|
||||||
|
break;
|
||||||
end;
|
end;
|
||||||
CloseHandle( FinEvent );
|
FMonitor.Free;
|
||||||
FPath := '';
|
FPath := '';
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
@ -2394,6 +2408,13 @@ function TDirChange.Execute(Sender: PThread): Integer;
|
|||||||
var Handles: array[ 0..1 ] of THandle;
|
var Handles: array[ 0..1 ] of THandle;
|
||||||
//i: Integer;
|
//i: Integer;
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF DIRCHG_ONEXECUTE}
|
||||||
|
if Assigned( OnExecute ) then
|
||||||
|
OnExecute( @ Self );
|
||||||
|
{$ENDIF}
|
||||||
|
FinEvent := CreateEvent( nil, TRUE, FALSE, nil );
|
||||||
|
FHandle := FindFirstChangeNotification(PKOLChar(FPath),
|
||||||
|
Bool( Integer( FWatchSubtree ) ), FFlags);
|
||||||
Handles[ 0 ] := FHandle;
|
Handles[ 0 ] := FHandle;
|
||||||
Handles[ 1 ] := FinEvent;
|
Handles[ 1 ] := FinEvent;
|
||||||
while not AppletTerminated do
|
while not AppletTerminated do
|
||||||
@ -2401,7 +2422,6 @@ begin
|
|||||||
WAIT_OBJECT_0:
|
WAIT_OBJECT_0:
|
||||||
begin
|
begin
|
||||||
if AppletTerminated or FDestroying then break;
|
if AppletTerminated or FDestroying then break;
|
||||||
//Applet.GetWindowHandle;
|
|
||||||
Sender.Synchronize( Changed );
|
Sender.Synchronize( Changed );
|
||||||
FindNextChangeNotification(Handles[ 0 ]);
|
FindNextChangeNotification(Handles[ 0 ]);
|
||||||
end;
|
end;
|
||||||
@ -2411,7 +2431,9 @@ begin
|
|||||||
TRY
|
TRY
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
FindCloseChangeNotification( Handles[ 0 ] );
|
FindCloseChangeNotification( Handles[ 0 ] );
|
||||||
//CloseHandle( Handles[ 1 ] );
|
FHandle := 0;
|
||||||
|
CloseHandle( FinEvent );
|
||||||
|
FinEvent := 0;
|
||||||
{$IFDEF SAFE_CODE}
|
{$IFDEF SAFE_CODE}
|
||||||
EXCEPT
|
EXCEPT
|
||||||
END;
|
END;
|
||||||
@ -3506,8 +3528,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
W := Btn.BoundsRect.Right;
|
W := Btn.BoundsRect.Right;
|
||||||
end;
|
end;
|
||||||
DlgPrnt.Width := Max(
|
DlgPrnt.ClientWidth := Max(
|
||||||
Max( DlgPrnt.Width, Lab.Left + Lab.Width + 4 ), W + 8 );
|
Max( DlgPrnt.ClientWidth, Lab.Left + Lab.Width + 4 ), W + 8 );
|
||||||
X := (DlgPrnt.ClientWidth - W) div 2;
|
X := (DlgPrnt.ClientWidth - W) div 2;
|
||||||
for I := 0 to Buttons.Count-1 do
|
for I := 0 to Buttons.Count-1 do
|
||||||
begin
|
begin
|
||||||
@ -3536,7 +3558,7 @@ begin
|
|||||||
{$ENDIF TOGRUSH_OPTIONAL}
|
{$ENDIF TOGRUSH_OPTIONAL}
|
||||||
begin
|
begin
|
||||||
DlgPrnt.ResizeParent;
|
DlgPrnt.ResizeParent;
|
||||||
DlgPrnt.Width := Max( DlgPrnt.Width, Dialog.Width - 14 );
|
DlgPrnt.ClientWidth := Max( DlgPrnt.ClientWidth, Dialog.Width - 14 );
|
||||||
end;
|
end;
|
||||||
Bmp.Free;
|
Bmp.Free;
|
||||||
{$ENDIF USE_GRUSH}
|
{$ENDIF USE_GRUSH}
|
||||||
@ -3561,8 +3583,7 @@ begin
|
|||||||
Dialog.ShowModal;
|
Dialog.ShowModal;
|
||||||
Result := Dialog.ModalResult;
|
Result := Dialog.ModalResult;
|
||||||
Dialog.Free;
|
Dialog.Free;
|
||||||
end
|
end else
|
||||||
else
|
|
||||||
begin
|
begin
|
||||||
DlgWnd := Dialog.Handle;
|
DlgWnd := Dialog.Handle;
|
||||||
while IsWindow( DlgWnd ) and (Dialog.ModalResult = 0) do
|
while IsWindow( DlgWnd ) and (Dialog.ModalResult = 0) do
|
||||||
|
16
mirror.pas
16
mirror.pas
@ -8228,6 +8228,8 @@ begin
|
|||||||
if (KF <> nil) and KF.FormCompact then
|
if (KF <> nil) and KF.FormCompact then
|
||||||
begin
|
begin
|
||||||
KF.FormAddCtlCommand( Name, 'TControl.SetDefaultBtn' );
|
KF.FormAddCtlCommand( Name, 'TControl.SetDefaultBtn' );
|
||||||
|
KF.FormAddNumParameter( 13 );
|
||||||
|
KF.FormAddNumParameter( 1 );
|
||||||
// param = 1
|
// param = 1
|
||||||
end else
|
end else
|
||||||
SL.Add( Prefix + AName + '.DefaultBtn := TRUE;' );
|
SL.Add( Prefix + AName + '.DefaultBtn := TRUE;' );
|
||||||
@ -8235,7 +8237,9 @@ begin
|
|||||||
if fCancelBtn then
|
if fCancelBtn then
|
||||||
if (KF <> nil) and KF.FormCompact then
|
if (KF <> nil) and KF.FormCompact then
|
||||||
begin
|
begin
|
||||||
KF.FormAddCtlCommand( Name, 'TControl.SetCancelBtn' );
|
KF.FormAddCtlCommand( Name, 'TControl.SetDefaultBtn' );
|
||||||
|
KF.FormAddNumParameter( 27 );
|
||||||
|
KF.FormAddNumParameter( 1 );
|
||||||
// param = 1
|
// param = 1
|
||||||
end else
|
end else
|
||||||
SL.Add( Prefix + AName + '.CancelBtn := TRUE;' );
|
SL.Add( Prefix + AName + '.CancelBtn := TRUE;' );
|
||||||
@ -8247,11 +8251,13 @@ begin
|
|||||||
Integer( AnchorTop ) shl 1 +
|
Integer( AnchorTop ) shl 1 +
|
||||||
Integer( AnchorRight ) shl 2 +
|
Integer( AnchorRight ) shl 2 +
|
||||||
Integer( AnchorBottom ) shl 3;
|
Integer( AnchorBottom ) shl 3;
|
||||||
|
if (i = 1) or (i = 2) or (i = 4) or (i = 8) then
|
||||||
|
KF.FormAddCtlCommand( Name, 'TControl.SetAnchor' );
|
||||||
CASE i OF
|
CASE i OF
|
||||||
1: KF.FormAddCtlCommand( Name, 'TControl.SetAnchorLeft' );
|
1: KF.FormAddNumParameter( ANCHOR_LEFT );
|
||||||
2: KF.FormAddCtlCommand( Name, 'TControl.SetAnchorTop' );
|
2: KF.FormAddNumParameter( ANCHOR_TOP );
|
||||||
4: KF.FormAddCtlCommand( Name, 'TControl.SetAnchorRight' );
|
4: KF.FormAddNumParameter( ANCHOR_RIGHT );
|
||||||
8: KF.FormAddCtlCommand( Name, 'TControl.SetAnchorBottom' );
|
8: KF.FormAddNumParameter( ANCHOR_BOTTOM );
|
||||||
else
|
else
|
||||||
KF.FormAddCtlCommand( Name, 'FormSetAnchor' );
|
KF.FormAddCtlCommand( Name, 'FormSetAnchor' );
|
||||||
KF.FormAddNumParameter( i );
|
KF.FormAddNumParameter( i );
|
||||||
|
Reference in New Issue
Block a user