From 99f1c859eea7d70884d1ad8fa12b061f7b3f8b04 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 9 Oct 2012 18:48:50 +0000 Subject: KOL merged with Libs git-svn-id: http://svn.miranda-ng.org/main/trunk@1849 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc | 4351 --------------------------- 1 file changed, 4351 deletions(-) delete mode 100644 plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc (limited to 'plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc') diff --git a/plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc b/plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc deleted file mode 100644 index 29c9c49f15..0000000000 --- a/plugins/ImportTXT/kol/KOL_ASM_NOUNICODE.inc +++ /dev/null @@ -1,4351 +0,0 @@ -//------------------------------------------------------------------------------ -// KOL_ASM_NOUNICODE.inc (to inlude in KOL.pas) -// v 3.141592 - -// this part of code is for case when ASM_VERSION is enabled and the symbol -// UNICODE_CTRLS is NOT defined (functions, procedures and methods which work -// with AnsiStrings only) - -const comctl32_const: PKOLChar = 'comctl32'; - InitCommonControlsEx_const: PKOLChar = 'InitCommonControlsEx'; -procedure DoInitCommonControls( dwICC: DWORD ); -asm - PUSH EAX // dwICC - CALL InitCommonControls - MOV EAX, [ComCtl32_Module] - TEST EAX, EAX - JNZ @@1 - PUSH [comctl32_const] - CALL LoadLibrary - MOV [ComCtl32_Module], EAX -@@1:PUSH [InitCommonControlsEx_const] - PUSH EAX - CALL GetProcAddress - XCHG ECX, EAX - {$IFDEF SAFE_CODE} - POP EDX - JECXZ @@fin - PUSH EDX - {$ENDIF} - PUSH 8 // dwSize - PUSH ESP // @ ICC - CALL ECX // Proc( @ ICC ) - POP ECX - POP ECX -@@fin: -end; - -function ShowMsg( const S: KOLString; Flags: DWORD ): DWORD; -asm - push edx // Flags - mov ecx, [Applet] - {$IFDEF SNAPMOUSE2DFLTBTN} - {$IFDEF SAFE_CODE} - jecxz @@0 - {$ENDIF} - pushad - xchg eax, ecx - mov edx, offset[WndProcSnapMouse2DfltBtn] - call TControl.AttachProc - popad -@@0: - {$ENDIF} - mov edx, 0 - {$IFDEF SAFE_CODE} - jecxz @@1 - {$ENDIF} - mov edx, [ecx].TControl.fHandle - mov ecx, [ecx].TControl.fCaption -@@1: push ecx // Title - push eax // S - push edx // Wnd - call MessageBox - {$IFDEF SNAPMOUSE2DFLTBTN} - mov ecx, [Applet] - {$IFDEF SAFE_CODE} - jecxz @@2 - {$ENDIF} - pushad - xchg eax, ecx - mov edx, offset[WndProcSnapMouse2DfltBtn] - call TControl.DetachProc - popad -@@2: - {$ENDIF} -end; - -procedure TGraphicTool.SetFontName(const Value: KOLString); -asm - PUSH EAX - LEA EAX, [EAX].fData.Font.Name - XOR ECX, ECX - MOV CL, 32 - PUSH EAX - PUSH ECX - PUSH EDX - CALL StrLComp - //TEST EAX, EAX - POP EDX - POP ECX - POP EAX - JZ @@exit - CALL StrLCopy - POP EAX - PUSH EAX - CALL Changed -@@exit: POP EAX -end; - -{$IFDEF TEXT_EXTENT_OLD} -function TCanvas.TextExtent(const Text: KOLString): TSize; -asm - PUSH EBX - PUSH ESI - MOV EBX, EAX - PUSH ECX - PUSH ECX // prepare @Result - MOV EAX, EDX - CALL System.@LStrLen - PUSH EAX // prepare Length(Text) - CALL EDX2PChar - PUSH EDX // prepare PChar(Text) - {$IFDEF SAFE_CODE} - MOV EAX, EBX - CALL RefInc - {$ENDIF} - PUSH HandleValid or FontValid - PUSH EBX - CALL RequiredState - XCHG ESI, EAX - TEST ESI, ESI // ESI = fHandle before - JNZ @@1 - PUSH ESI - CALL CreateCompatibleDC - MOV EDX, EBX - XCHG EAX, EDX // EAX := @Self; EDX := DC - CALL SetHandle -//****************************************************** // Added By M.Gerasimov - CMP WORD PTR [EBX].TCanvas.fIsPaintDC, 0 - JNZ @@2 - XOR ESI,ESI -@@2: -//****************************************************** -@@1: - PUSH HandleValid or FontValid - PUSH EBX - CALL RequiredState - PUSH EAX // prepare DC - CALL Windows.GetTextExtentPoint32A // KOL_ANSI - POP EDX // @ Result - {$IFDEF FIX_ITALIC_TEXT_WIDTH} - MOV ECX, [EBX].fFont - //JECXZ @@0 - CMP [ECX].TGraphicTool.fData.Font.Italic, 0 - JZ @@0 - MOV EAX, [EDX].TSize.cy - SHR EAX, 2 - ADD DWORD PTR [EDX], EAX -@@0: {$ENDIF} - TEST ESI, ESI - JNZ @@exit - XOR EDX, EDX - XCHG EAX, EBX - CALL SetHandle -@@exit: - {$IFDEF SAFE_CODE} - PUSH EAX - XCHG EAX, EBX - CALL RefDec - POP EAX - {$ENDIF} - POP ESI - POP EBX -end; -{$ELSE TEXT_EXTENT_NEW} -function TCanvas.TextExtent(const Text: KOLString): TSize; -asm - PUSH ESI - {$IFDEF FIX_ITALIC_TEXT_WIDTH} - PUSH EBX - MOV EBX, ECX - {$ENDIF} - XCHG ESI, EAX // ESI = @Self: PCanvas - CALL EDX2PChar - PUSH ECX - PUSH EDX - - XCHG EAX, EDX - CALL StrLen - XCHG [ESP], EAX - PUSH EAX - - PUSH HandleValid or FontValid - PUSH ESI - CALL TCanvas.RequiredState - PUSH [ESI].TCanvas.fHandle - CALL GetTextExtentPoint32 - {$IFDEF FIX_ITALIC_TEXT_WIDTH} - CMP [ESI].TGraphicTool.fData.Font.Italic, 0 - JZ @@1 - MOV EAX, [EBX].TSize.cy - SHR EAX, 2 - ADD DWORD PTR [EBX].TSize, EAX -@@1: POP EBX - {$ENDIF} - POP ESI -end; -{$ENDIF TEXT_EXTENT_NEW} - -procedure TCanvas.TextOut(X, Y: Integer; const Text: KOLString); stdcall; -asm - PUSH EBX - MOV EBX, [EBP+8] - - MOV EAX, [Text] - PUSH EAX - CALL System.@LStrLen - XCHG EAX, [ESP] // prepare Length(Text) - - //CALL System.@LStrToPChar // string does not need to be null-terminated ! - PUSH EAX // prepare PChar(Text) - PUSH [Y] // prepare Y - PUSH [X] // prepare X - - PUSH HandleValid or FontValid or BrushValid or ChangingCanvas - PUSH EBX - CALL RequiredState - PUSH EAX // prepare fHandle - CALL Windows.TextOutA // KOL_ANSI - - POP EBX -end; - -function Int2Hex( Value : DWord; Digits : Integer ) : KOLString; -asm // EAX = Value - // EDX = Digits - // ECX = @Result - PUSH 0 - ADD ESP, -0Ch - PUSH EDI - PUSH ECX - LEA EDI, [ESP+8+0Fh] // EBX := @Buf[ 15 ] - {$IFDEF SMALLEST_CODE} - {$ELSE} - AND EDX, $F - {$ENDIF} -@@loop: DEC EDI - DEC EDX - PUSH EAX - {$IFDEF PARANOIA} DB $24, $0F {$ELSE} AND AL, 0Fh {$ENDIF} - AAM - DB $D5, $11 //AAD - ADD AL, $30 - STOSB - DEC EDI - POP EAX - SHR EAX, 4 - JNZ @@loop - TEST EDX, EDX - JG @@loop - POP EAX // EAX = @Result - MOV EDX, EDI // EDX = @resulting string - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - POP EDI - ADD ESP, 10h -end; - -function Hex2Int( const Value : AnsiString) : Integer; -asm - CALL EAX2PChar - PUSH ESI - XCHG ESI, EAX - XOR EDX, EDX - TEST ESI, ESI - JE @@exit - LODSB - {$IFDEF PARANOIA} DB $3C, '$' {$ELSE} CMP AL, '$' {$ENDIF} - JNE @@1 -@@0: LODSB -@@1: TEST AL, AL - JE @@exit - {$IFDEF PARANOIA} DB $2C, '0' {$ELSE} SUB AL, '0' {$ENDIF} - {$IFDEF PARANOIA} DB $3C, 9 {$ELSE} CMP AL, '9' - '0' {$ENDIF} - JBE @@3 - - {$IFDEF PARANOIA} DB $2C, $11 {$ELSE} SUB AL, 'A' - '0' {$ENDIF} - {$IFDEF PARANOIA} DB $3C, 5 {$ELSE} CMP AL, 'F' - 'A' {$ENDIF} - JBE @@2 - - {$IFDEF PARANOIA} DB $2C, 32 {$ELSE} SUB AL, 32 {$ENDIF} - {$IFDEF PARANOIA} DB $3C, 5 {$ELSE} CMP AL, 'F' - 'A' {$ENDIF} - JA @@exit -@@2: - {$IFDEF PARANOIA} DB $04, 0Ah {$ELSE} ADD AL, 0Ah {$ENDIF} -@@3: - SHL EDX, 4 - ADD DL, AL - JMP @@0 - -@@exit: XCHG EAX, EDX - POP ESI -end; - -function Int2Str( Value : Integer ) : KOLString; -asm - XOR ECX, ECX - PUSH ECX - ADD ESP, -0Ch - - PUSH EBX - LEA EBX, [ESP + 15 + 4] - PUSH EDX - CMP EAX, ECX - PUSHFD - JGE @@1 - NEG EAX -@@1: - MOV CL, 10 - -@@2: - DEC EBX - XOR EDX, EDX - DIV ECX - ADD DL, 30h - MOV [EBX], DL - TEST EAX, EAX - JNZ @@2 - - POPFD - JGE @@3 - - DEC EBX - MOV byte ptr [EBX], '-' -@@3: - POP EAX - MOV EDX, EBX - {$IFDEF _D2009orHigher} - XOR ECX, ECX // TODO: safe to destory twice? - {$ENDIF} - CALL System.@LStrFromPChar - - POP EBX - ADD ESP, 10h -end; - -function Int2Ths( I : Integer ) : AnsiString; -asm - PUSH EBP - MOV EBP, ESP - PUSH EAX - PUSH EDX - CALL Int2Str - POP EDX - POP EAX - TEST EAX, EAX - JGE @@0 - NEG EAX -@@0: - CMP EAX, 1000 - JL @@Exit - PUSH EDX - MOV EAX, [EDX] - PUSH EAX - CALL System.@LStrLen // EAX = Length(Result) - POP EDX - PUSH EDX // EDX = @Result[ 1 ] - XOR ECX, ECX - -@@1: - ROL ECX, 8 - DEC EAX - MOV CL, [EDX+EAX] - JZ @@fin - CMP ECX, 300000h - JL @@1 - - PUSH ECX - XOR ECX, ECX - MOV CL, [ThsSeparator] - JMP @@1 - -@@fin: CMP CL, '-' - JNE @@fin1 - CMP CH, [ThsSeparator] - JNE @@fin1 - MOV CH, 0 // this corrects -,ddd,... -@@fin1: CMP ECX, 01000000h - JGE @@fin2 - INC EAX - ROL ECX, 8 - JMP @@fin1 -@@fin2: PUSH ECX - - LEA EDX, [ESP+EAX] - MOV EAX, [EBP-4] - {$IFDEF _D2009orHigher} - XOR ECX, ECX // TODO: safe to change ecx? - {$ENDIF} - CALL System.@LStrFromPChar -@@Exit: - MOV ESP, EBP - POP EBP -end; - -function Int2Digs( Value, Digits : Integer ) : KOLString; -asm - PUSH EBP - MOV EBP, ESP - PUSH EDX // [EBP-4] = Digits - PUSH ECX - MOV EDX, ECX - CALL Int2Str - POP ECX - PUSH ECX // [EBP-8] = @Result - MOV EAX, [ECX] - PUSH EAX - CALL System.@LStrLen - POP EDX // EDX = @Result[1] - MOV ECX, EAX // ECX = Length( Result ) - ADD EAX, EAX - SUB ESP, EAX - MOV EAX, ESP - PUSHAD - CALL StrCopy - POPAD - MOV EDX, EAX - ADD ESP, -100 - CMP byte ptr [EDX], '-' - PUSHFD - JNE @@1 - INC EDX -@@1: - MOV EAX, [EBP-4] // EAX = Digits - CMP ECX, EAX - JGE @@2 - DEC EDX - MOV byte ptr [EDX], '0' - INC ECX - JMP @@1 -@@2: - POPFD - JNE @@3 - DEC EDX - MOV byte ptr [EDX], '-' -@@3: - MOV EAX, [EBP-8] - {$IFDEF _D2009orHigher} - XOR ECX, ECX // TODO: eax or ecx affect result? - {$ENDIF} - CALL System.@LStrFromPChar - MOV ESP, EBP - POP EBP -end; - -function Num2Bytes( Value : Double ) : KOLString; -asm PUSH EBX - PUSH ESI - PUSH EDI - MOV EBX, ESP - MOV ESI, EAX - MOV ECX, 4 - MOV EDX, 'TGMk' -@@1: FLD [Value] -@@10: FICOM dword ptr [@@1024] - FSTSW AX - SAHF - JB @@2 - FIDIV dword ptr [@@1024] - FST [Value] - WAIT - TEST DL, 20h - JE @@ror - AND DL, not 20h - JMP @@nxt -@@1024: DD 1024 -@@100: DD 100 -@@ror: ROR EDX, 8 -@@nxt: LOOP @@10 -@@2: TEST DL, 20h - JZ @@3 - MOV DL, 0 -@@3: MOV DH, 0 - PUSH DX - MOV EDI, ESP - FLD ST(0) - CALL System.@TRUNC - {$IFDEF _D2orD3} - PUSH 0 - {$ELSE} - PUSH EDX - {$ENDIF} - PUSH EAX - FILD qword ptr [ESP] - POP EDX - POP EDX - MOV EDX, ESI - CALL Int2Str - FSUBP ST(1), ST - FIMUL dword ptr [@@100] - CALL System.@TRUNC - TEST EAX, EAX - JZ @@4 - XOR ECX, ECX - MOV CL, 0Ah - CDQ - IDIV ECX - TEST EDX, EDX - JZ @@5 - MOV AH, DL - SHL EAX, 16 - ADD EAX, '00. ' - PUSH EAX - MOV EDI, ESP - INC EDI - JMP @@4 -@@5: SHL EAX, 8 - ADD AX, '0.' - PUSH AX - MOV EDI, ESP -@@4: MOV EAX, [ESI] - CALL System.@LStrLen - ADD ESP, -100 - SUB EDI, EAX - PUSH ESI - PUSH EDI - MOV ESI, [ESI] - MOV ECX, EAX - REP MOVSB - POP EDX - POP EAX - {$IFDEF _D2009orHigher} - XOR ECX, ECX // TODO: IDIV - {$ENDIF} - CALL System.@LStrFromPChar - MOV ESP, EBX - POP EDI - POP ESI - POP EBX -end; - -function S2Int( S: PKOLChar ): Integer; -asm - XCHG EDX, EAX - XOR EAX, EAX - TEST EDX, EDX - JZ @@exit - - XOR ECX, ECX - MOV CL, [EDX] - INC EDX - CMP CL, '-' - PUSHFD - JE @@0 -@@1: CMP CL, '+' - JNE @@2 -@@0: MOV CL, [EDX] - INC EDX -@@2: SUB CL, '0' - CMP CL, '9'-'0' - JA @@fin - LEA EAX, [EAX+EAX*4] // - LEA EAX, [ECX+EAX*2] // - JMP @@0 -@@fin: POPFD - JNE @@exit - NEG EAX -@@exit: -end; - -function Str2Int(const Value : KOLString) : Integer; -asm - CALL EAX2PChar - CALL S2Int -end; - -function TrimLeft(const S: Ansistring): Ansistring; -asm - XCHG EAX, EDX - CALL EDX2PChar - DEC EDX -@@1: INC EDX - MOVZX ECX, byte ptr [EDX] - JECXZ @@fin - CMP CL, ' ' - JBE @@1 -@@fin: - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar -end; - -function TrimRight(const S: Ansistring): Ansistring; -asm - PUSH EDX - PUSH EAX - - PUSH EAX - CALL System.@LStrLen - XCHG EAX, [ESP] - CALL EAX2PChar - POP ECX - INC ECX -@@1: DEC ECX - MOV DL, [EAX+ECX] - JL @@fin - CMP DL, ' ' - JBE @@1 -@@fin: - INC ECX - POP EAX - XOR EDX, EDX - INC EDX - CALL System.@LStrCopy -end; - -function CopyEnd( const S : AnsiString; Idx : Integer ) : AnsiString; -asm - PUSH ECX - PUSH EAX - PUSH EDX - - CALL System.@LStrLen - - POP EDX - TEST EDX, EDX - JG @@1 - XOR EDX, EDX - INC EDX -@@1: - SUB EAX, EDX - MOV ECX, EAX - - POP EAX - JGE @@ret_end - - POP EAX - JL System.@LStrClr - -@@ret_end: - INC ECX - CALL System.@LStrCopy -end; - -function CopyTail( const S : AnsiString; Len : Integer ) : AnsiString; -asm - PUSH ECX - PUSH EAX - PUSH EDX - CALL System.@LStrLen - POP ECX - CMP ECX, EAX - {$IFDEF USE_CMOV} - CMOVG ECX, EAX - {$ELSE} - JLE @@1 - MOV ECX, EAX -@@1: {$ENDIF} - - MOV EDX, EAX - SUB EDX, ECX - INC EDX - POP EAX - CALL System.@LStrCopy -end; - -procedure DeleteTail( var S : AnsiString; Len : Integer ); -asm - PUSH EAX - PUSH EDX - MOV EAX, [EAX] - CALL System.@LStrLen - POP ECX - CMP ECX, EAX - {$IFDEF USE_CMOV} - CMOVG ECX, EAX - {$ELSE} - JLE @@1 - MOV ECX, EAX -@@1: {$ENDIF} - - MOV EDX, EAX - SUB EDX, ECX - INC EDX - POP EAX - CALL System.@LStrDelete -end; - -{$IFnDEF TEST_INDEXOFCHARS_COMPAT} -function IndexOfChar( const S : KOLString; Chr : KOLChar ) : Integer; -asm - CALL EAX2PChar - PUSH EAX - MOV ECX, [EAX-4] - CALL StrScanLen - POP EDX - JZ @@1 - LEA EDX, [EAX+1] -@@1: SUB EAX, EDX -end; -{$ENDIF} - -function IndexOfCharsMin( const S, Chars : AnsiString ) : Integer; -asm PUSH ESI - PUSH EBX - PUSH EAX - CALL EDX2PChar - MOV ESI, EDX - - OR EBX, -1 - MOV ECX, [EDX-4] - JECXZ @@EXIT - -@@1: LODSB - - XCHG EDX, EAX - POP EAX - PUSH EAX - - PUSH ECX - CALL IndexOfChar - POP ECX - TEST EAX, EAX - JLE @@NEXT - - TEST EBX, EBX - JLE @@ASGN - CMP EAX, EBX - JGE @@NEXT -@@ASGN: - XCHG EAX, EBX -@@NEXT: LOOP @@1 - -@@EXIT: XCHG EAX, EBX - POP ECX - POP EBX - POP ESI -end; - -function Parse( var S : AnsiString; const Separators : AnsiString ) : AnsiString; -asm - PUSH EBX - PUSH ESI - PUSH EDI - MOV EDI, ECX - XCHG ESI, EAX - MOV EAX, [ESI] - CALL IndexOfCharsMin - XCHG EBX, EAX - TEST EBX, EBX - JG @@1 - MOV EAX, [ESI] - CALL System.@LStrLen - XCHG EBX, EAX - INC EBX -@@1: - XOR EDX, EDX - INC EDX - PUSH EDX - - PUSH EDI - MOV ECX, EBX - DEC ECX - MOV EAX, [ESI] - CALL System.@LStrCopy - XCHG EAX, ESI - MOV ECX, EBX - POP EDX - CALL System.@LStrDelete - POP EDI - POP ESI - POP EBX -end; - -function _StrSatisfy( S, Mask : PKOLChar ) : Boolean; -asm - TEST EAX, EAX - JZ @@exit - XCHG ECX, EAX - // EDX <- Mask - // ECX <- S - XOR EAX, EAX - MOV AL, '*' -@@rest_satisfy: - PUSH ECX - PUSH EDX - -@@nx_char: - MOV AH, [EDX] - OR AH, [ECX] - JZ @@fin //@@ret_true - - MOV AH, 0 - - CMP word ptr [EDX], AX //'*' - JE @@fin //@@ret_true - - CMP byte ptr [ECX], AH - JNE @@10 - - DEC EDX -@@1: - INC EDX - CMP byte ptr [EDX], AL //'*' - JE @@1 - - CMP byte ptr [EDX], AH - SETZ AL - JMP @@fin - -@@10: CMP byte ptr [EDX], AH - JE @@ret_false - - CMP byte ptr [EDX], '?' - JNE @@11 - -@@go_nx_char: - INC ECX - INC EDX - JMP @@nx_char - -@@11: - CMP byte ptr [EDX], AL //'*' - JNE @@20 - - INC EDX -@@12: CMP byte ptr [ECX], AH - JE @@ret_false - - CALL @@rest_satisfy - TEST AL, AL - JNE @@fin - MOV AL, '*' - - INC ECX - JMP @@12 - -@@20: MOV AH, [EDX] - XOR AH, [ECX] - - JE @@go_nx_char -@@ret_false: - XOR EAX, EAX - -@@fin: - POP EDX - POP ECX -@@exit: -end; - -function StrSatisfy( const S, Mask: AnsiString ): Boolean; -asm - PUSH ESI - TEST EAX, EAX - JZ @@exit - - XCHG ESI, EAX - - XCHG EAX, EDX - TEST EAX, EAX - JZ @@exit - - CALL EAX2PChar - - PUSH 0 - MOV EDX, ESP - CALL AnsiLowerCase - - XCHG EAX, ESI - CALL EAX2PChar - - PUSH 0 - MOV EDX, ESP - CALL AnsiLowerCase - - POP EAX - POP EDX - PUSH EDX - PUSH EAX - CALL _StrSatisfy - - XCHG ESI, EAX - - CALL RemoveStr - CALL RemoveStr - XCHG EAX, ESI - -@@exit: - POP ESI -end; - -function _2StrSatisfy( S, Mask: PAnsiChar ): Boolean; -asm // // - PUSH EBX - PUSH ECX - XCHG EBX, EAX - PUSH 0 - MOV EAX, ESP - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - PUSH 0 - MOV EAX, ESP - MOV EDX, EBX - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - POP EAX - POP EDX - PUSH EDX - PUSH EAX - CALL StrSatisfy - XCHG EBX, EAX - CALL RemoveStr - CALL RemoveStr - XCHG EAX, EBX - POP ECX - POP EBX -end; - -function SkipSpaces( P: PKOLChar ): PKOLChar; -asm - DEC EAX -@@loop: INC EAX - CMP byte ptr [EAX], 0 - JE @@exit - CMP byte ptr [EAX], ' ' - JBE @@loop -@@exit: -end; - -function SkipParam(P: PKOLChar): PKOLChar; -asm - CALL SkipSpaces -@@while: CMP byte ptr [EAX], ' ' - JBE @@exit - CMP byte ptr [EAX], '"' - JNE @@incP_goLoop -@@untilQuot: - INC EAX - CMP byte ptr [EAX], 0 - JE @@exit - CMP byte ptr [EAX], '"' - JNE @@untilQuot -@@incP_goLoop: - INC EAX - JMP @@while -@@exit: -end; - -function ParamCount: Integer; -asm - CALL GetCommandLine - OR EDX, -1 -@@while: INC EDX - CALL SkipParam - CALL SkipSpaces - CMP byte ptr [EAX], 0 - JNE @@while - XCHG EAX, EDX -end; - -function __DelimiterLast( Str: PAnsiChar; Delimiters: PAnsiChar ): PAnsiChar; -asm - PUSH ESI - - CALL EAX2PChar - - MOV ESI, EDX - MOV EDX, EAX - -@@tolast: - CMP byte ptr [EAX], 0 - JZ @@next1 - INC EAX - JMP @@tolast - -@@next1: - PUSH EAX - -@@next: - LODSB - TEST AL, AL - JZ @@exit - - PUSH EDX - XCHG EDX, EAX - CALL StrRScan - POP EDX - - TEST EAX, EAX - JZ @@next - - POP ECX - CMP byte ptr [ECX], 0 - JZ @@next1 - - CMP EAX, ECX - JG @@next1 - - PUSH ECX - JLE @@next - -@@exit: POP EAX - POP ESI -end; - -function DelimiterLast( const Str, Delimiters: KOLString ): Integer; -asm - CALL EAX2PChar - CALL EDX2PChar - PUSH EAX - CALL __DelimiterLast - POP EDX - SUB EAX, EDX - INC EAX -end; - -function StrIsStartingFrom( Str, Pattern: PKOLChar ): Boolean; -asm - {$IFDEF F_P} - MOV EAX, [Str] - MOV EDX, [Pattern] - {$ENDIF F_P} - XOR ECX, ECX - @@1: - MOV CL, [EDX] // pattern[ i ] - INC EDX - MOV CH, [EAX] // str[ i ] - INC EAX - JECXZ @@2 // str = pattern; CL = #0, CH = #0 - CMP CL, CH - JE @@1 - @@2: - TEST CL, CL - SETZ AL -end {$IFDEF F_P} [ 'EAX', 'EDX', 'ECX' ] {$ENDIF}; - -function Format( const fmt: KOLString; params: array of const ): AnsiString; -asm - PUSH ESI - PUSH EDI - PUSH EBX - MOV EBX, ESP - {$IFDEF UNICODE_CTRLS} - ADD ESP, -2048 - {$ELSE} - ADD ESP, -1024 - {$ENDIF} - MOV ESI, ESP - - INC ECX - JZ @@2 -@@1: - MOV EDI, [EDX + ECX*8 - 8] - PUSH EDI - LOOP @@1 -@@2: - PUSH ESP - PUSH EAX - PUSH ESI - - CALL wvsprintf - - MOV EDX, ESI - MOV EAX, @Result - {$IFDEF _D2009orHigher} - PUSH ECX - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - {$IFDEF _D2009orHigher} - POP ECX - {$ENDIF} - - MOV ESP, EBX - POP EBX - POP EDI - POP ESI -end; - -function FileExists( const FileName : KOLString ) : Boolean; -const size_TWin32FindData = sizeof( {$IFDEF UNICODE_CTRLS} TWin32FindDataW {$ELSE} TWin32FindDataA {$ENDIF} ); - Size_TFindFileData = (sizeof(TFindFileData) + 3) and not 3; -asm -{$IFDEF FILE_EXISTS_EX} - PUSH EBX - MOV BL, 0 - PUSH EAX - PUSH SEM_NOOPENFILEERRORBOX or SEM_FAILCRITICALERRORS - CALL SetErrorMode - XCHG EAX, [ESP] - SUB ESP, Size_TFindFileData - MOV EDX, ESP - CALL Find_First - TEST AL, AL - JZ @@fin - MOV EAX, ESP - CALL Find_Close - TEST byte ptr [ESP].TFindFileData.dwFileAttributes, FILE_ATTRIBUTE_DIRECTORY - JNZ @@fin - PUSH ESP - LEA EAX, [ESP+4].TFindFileData.ftLastWriteTime - PUSH EAX - CALL FileTimeToLocalFileTime - LEA EAX, [ESP+8] - PUSH EAX - INC EAX - INC EAX - PUSH EAX - SUB EAX, 10 - PUSH EAX - CALL FileTimeToDOSDateTime - TEST EAX, EAX - SETNZ BL -@@fin: ADD ESP, Size_TFindFileData - CALL SetErrorMode - XCHG EAX, EBX - POP EBX -{$ELSE} - CALL EAX2PChar - PUSH EAX - CALL GetFileAttributes - INC EAX - JZ @@exit - DEC EAX - {$IFDEF PARANOIA} DB $24, FILE_ATTRIBUTE_DIRECTORY {$ELSE} AND AL, FILE_ATTRIBUTE_DIRECTORY {$ENDIF} - SETZ AL -@@exit: -{$ENDIF} -end; - -function DiskPresent( const DrivePath: KOLString ): Boolean; -asm - PUSH EBX - MOV BH, 0 - TEST EAX, EAX - JZ @@dirExists - CMP byte ptr [EAX], '\' - JZ @@dirExists - PUSH EAX - PUSH EAX - CALL GetDriveType - CMP AL, DRIVE_REMOVABLE - JE @@setErrMode - CMP AL, DRIVE_CDROM - JE @@setErrMode - CMP AL, DRIVE_RAMDISK - JNE @@popPath_dirExists -@@setErrMode: - INC BH - PUSH SEM_NOOPENFILEERRORBOX or SEM_FAILCRITICALERRORS - CALL SetErrorMode - XCHG [ESP], EAX - PUSH EAX -@@popPath_dirExists: - POP EAX -@@dirExists: - CALL DirectoryExists - MOV BL, AL - TEST BH, BH - JZ @@exit - CALL SetErrorMode -@@exit: XCHG EAX, EBX - POP EBX -end; - -function GetStartDir : AnsiString; -asm - PUSH EBX - MOV EBX, EAX - - XOR EAX, EAX - MOV AH, 2 - SUB ESP, EAX - MOV EDX, ESP - PUSH EAX - PUSH EDX - PUSH 0 - CALL GetModuleFileName // in KOL_ANSI - - LEA EDX, [ESP + EAX] -@@1: DEC EDX - CMP byte ptr [EDX], '\' - JNZ @@1 - - INC EDX - MOV byte ptr [EDX], 0 - - MOV EAX, EBX - MOV EDX, ESP - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar // AnsiSafe! - - ADD ESP, 200h - POP EBX -end; - -function IncludeTrailingChar( const S: KOLString; C: KOLChar ): KOLString; -asm - push edx - push ecx - xchg ecx, eax - xchg edx, ecx - call System.@LStrAsg - pop eax - pop edx - mov ecx, [eax] - jecxz @@1 - add ecx, [ecx-4] - dec ecx - cmp byte ptr [ecx], dl - jz @@exit -@@1: - push eax - push 0 - mov eax, esp - {$IFDEF _D2009orHigher} - //push ecx - xor ecx, ecx - {$ENDIF} - call System.@LStrFromChar - {$IFDEF _D2009orHigher} - //pop ecx - {$ENDIF} - mov edx, [esp] - mov eax, [esp+4] - call System.@LStrCat - call RemoveStr - pop eax -@@exit: -end; - -const - DirDelimiters: PAnsiChar = ':\/'; -function ExtractFileName( const Path : AnsiString ) : AnsiString; -asm - PUSH EDX - PUSH EAX - MOV EDX, [DirDelimiters] - CALL __DelimiterLast - POP EDX - CMP byte ptr [EAX], 0 - JZ @@1 - XCHG EDX, EAX - INC EDX -@@1: POP EAX - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar // Safe! -end; - -function ExtractFileNameWOext( const Path : KOLString ) : KOLString; -asm - push ebx - - push edx - push eax - call ExtractFileName - pop edx // Path - не нужен больше - mov eax, [esp] // eax = Result = ExtractFileName(Path) - mov eax, [eax] - push 0 - mov edx, esp - call ExtractFileExt - mov eax, [esp] - call System.@LStrLen - xchg ebx, eax // ebx = Length(ExtractFileExt(Result)) - call RemoveStr // ExtractFileExt - больше не нужен - mov eax, [esp] - mov eax, [eax] - call System.@LStrLen // eax = Length(Result) - sub eax, ebx - xchg ecx, eax - xor edx, edx - inc edx - mov eax, [esp] - mov eax, [eax] - call System.@LStrCopy - - pop ebx -end; - -const - ExtDelimeters: PAnsiChar = '.'; - -function ExtractFileExt( const Path : KOLString ) : KOLString; -asm - PUSH EDX - MOV EDX, [ExtDelimeters] - CALL EAX2PChar - CALL __DelimiterLast -@@1: XCHG EDX, EAX - POP EAX - {$IFDEF _D2009orHigher} - PUSH ECX - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - {$IFDEF _D2009orHigher} - POP ECX // this routine hasn't touch ECX - {$ENDIF} -end; - -function ReplaceExt( const Path, NewExt: KOLString ): KOLString; -asm - push ecx // result - push edx // NewExt - push eax // Path - - push 0 - mov edx, esp - call ExtractFilePath - pop eax - xchg [esp], eax // eax=Path, Path in stack replaced with ExtractFilePath(Path) - - push 0 - mov edx, esp - call ExtractFileNameWOext - // now stack conatins: result,NewExt,ExtractFilePath(Path),ExtractFileNameWOext(Path)<-ESP - - mov eax, [esp+12] - mov edx, esp - push dword ptr [edx+4] // ExtractFilePath(Path) - push dword ptr [edx] // ExtractFileNameWOext(Path) - push dword ptr [edx+8] // NewExt - mov edx, 3 - call System.@LStrCatN - call RemoveStr - call RemoveStr - pop ecx - pop ecx -end; - -function GetSystemDir: KOLString; -asm - PUSH EBX - XCHG EBX, EAX - SUB ESP, MAX_PATH - MOV EAX, ESP - PUSH MAX_PATH - PUSH EAX - CALL GetSystemDirectory - MOV EAX, EBX - MOV EDX, ESP - CALL System.@LStrFromPChar - MOV EDX, EBX - MOV EAX, [EDX] - CALL IncludeTrailingPathDelimiter - ADD ESP, MAX_PATH - POP EBX -end; - -function GetWindowsDir : KOLString; -asm - PUSH EBX - XCHG EBX, EAX - SUB ESP, MAX_PATH - MOV EAX, ESP - PUSH MAX_PATH - PUSH EAX - CALL GetWindowsDirectory - MOV EAX, EBX - MOV EDX, ESP - CALL System.@LStrFromPChar - MOV EDX, EBX - MOV EAX, [EDX] - CALL IncludeTrailingPathDelimiter - ADD ESP, MAX_PATH - POP EBX -end; - -function GetWorkDir : KOLString; -asm - PUSH EBX - XCHG EBX, EAX - SUB ESP, MAX_PATH - PUSH ESP - PUSH MAX_PATH - CALL GetCurrentDirectory - MOV EAX, EBX - MOV EDX, ESP - CALL System.@LStrFromPChar - MOV EDX, EBX - MOV EAX, [EDX] - CALL IncludeTrailingPathDelimiter - ADD ESP, MAX_PATH - POP EBX -end; - -function GetTempDir : KOLString; -asm - push eax - sub esp, 264 - push esp - push 261 - call GetTempPath - mov edx, esp - mov eax, [esp+264] - {$IFDEF _D2009orHigher} - xor ecx, ecx - {$ENDIF} - call System.@LStrFromPChar - add esp, 264 - pop edx - mov eax, [edx] - call IncludeTrailingPathDelimiter -end; - -function CreateTempFile( const DirPath, Prefix: KOLString ): KOLString; -asm - push ecx - call EAX2PCHAR - call EDX2PCHAR - sub esp, 264 - push esp - push 0 - push edx - push eax - call GetTempFileName - mov eax, [esp+264] - mov edx, esp - {$IFDEF _D2009orHigher} - xor ecx, ecx // ecx is argument - {$ENDIF} - call System.@LStrFromPChar - add esp, 268 -end; - -function FindFilter( const Filter: AnsiString): AnsiString; -asm - XCHG EAX, EDX - PUSH EAX - CALL System.@LStrAsg - POP EAX - CMP dword ptr [EAX], 0 - JNE @@exit - LEA EDX, @@mask_all - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - JE System.@LStrFromPChar -@@mask_all: DB '*.*',0 -@@exit: -end; - -procedure TDirList.ScanDirectoryEx(const DirPath, Filters: AnsiString; - Attr: DWord); -asm - PUSH EBX - MOV EBX, EAX - - PUSHAD - LEA EAX, [EBX].fFilters - CALL Free_And_Nil - - CALL NewStrList - MOV [EBX].fFilters, EAX - POPAD - - PUSHAD - PUSH 0 - MOV EAX, ESP - MOV EDX, ECX - CALL System.@LStrLAsg -@@1: MOV ECX, [ESP] - JECXZ @@2 - MOV EAX, ESP - MOV EDX, offset[@@semicolon] - PUSH 0 - MOV ECX, ESP - CALL Parse - MOV EAX, [ESP] - MOV EDX, ESP - CALL Trim - POP EDX - PUSH EDX - TEST EDX, EDX - JZ @@filt_added - MOV EAX, [EBX].fFilters - CALL TStrList.Add -@@filt_added: - CALL RemoveStr - JMP @@1 - - // ';' string literal - {$IFDEF _D2009orHigher} - DW 0, 1 - {$ENDIF} - DD -1, 1 -@@semicolon: - DB ';',0 - -@@2: POP ECX - POPAD - XOR ECX, ECX - PUSH [Attr] - CALL ScanDirectory - POP EBX -@@exit: -end; - -procedure _FillStrList; // Эта часть кода общая для двух следующих процедур -asm -/////////////////////////////// - OR EAX,0 - JE @@EXIT //ERROR -// LEA EAX,[EAX-IniBufferSize] -// JE @@EXIT -// возможна нехватка Буфера... в принципе не ошибка :) -// возвращаем что влезло... -@@LOOP: - LEA EAX,[ESI+4] - CALL StrLen - MOV [ESI],EAX - LEA EDX,[ESI+4] - INC EAX - ADD ESI,EAX - - MOV EAX,EDI - - CALL TStrList.ADD - - CMP byte ptr [ESI+4],0 - JNE @@LOOP - -@@EXIT: - POP EAX - CALL System.@FreeMem - - - POP ECX - POP EBX - POP EDI - POP ESI -end; - -procedure TIniFile.GetSectionNames(Names: PStrList); -asm - PUSH ESI - PUSH EDI - PUSH EBX - PUSH ECX - - MOV EBX,EAX - MOV EAX, IniBufferStrSize - MOV EDI,EDX - - CALL System.@GetMem - MOV ESI,EAX - PUSH EAX - - PUSH [EBX].fFileName - MOV EAX,IniBufferSize - PUSH EAX - - LEA EAX,[ESI+4] - PUSH EAX - - CALL GetPrivateProfileSectionNames - JMP _FillStrList -end; - -procedure TIniFile.SectionData(Names: PStrList); -asm - PUSH ESI - PUSH EDI - PUSH EBX - PUSH ECX - - MOV EBX,EAX - MOV EAX, IniBufferStrSize - MOV EDI,EDX - - CALL System.@GetMem - MOV ESI,EAX - PUSH EAX - - OR [EBX].fMode,0 - JNE @@DOWrite - - PUSH [EBX].fFileName - MOV EAX,IniBufferSize - PUSH EAX - - LEA EAX,[ESI+4] - PUSH EAX - PUSH [EBX].fSection - - CALL GetPrivateProfileSection - JMP _FillStrList - -@@DOWrite: - - PUSH EBX - PUSH ESI - PUSH EDX - PUSH EBP - - MOV EDX,0 - MOV EBP,[EDI].TStrList.fCount - MOV EBX,IniBufferSize-2 // оставим место для #0#0 - -{ECM+++>} OR EBP,EBP // otherwise GetPChars when StrList.Count = 0 crashed - -@@LOOP: - JE @@ENDLOOP - - OR EBX,EBX - JE @@ENDLOOP - - PUSH EDX - MOV EAX,EDI - CALL TStrList.GetPChars - - PUSH EAX - CALL StrLen - POP EAX - - XOR ECX,-1 - MOV EDX,ESI - - SUB EBX,ECX - JA @@L1 - ADD ECX,EBX - XOR EBX,EBX -@@L1: - - ADD ESI,ECX - - CALL MOVE -@@L2: - POP EDX - INC EDX - DEC EBP - JMP @@LOOP -@@ENDLOOP: - MOV WORD PTR [ESI],0 - - POP EBP - POP EDX - POP ESI - POP EBX - MOV EAX,EBX - CALL ClearSection - - PUSH [EBX].fFileName - PUSH ESI - PUSH [EBX].fSection - - CALL WritePrivateProfileSection - - POP EAX - CALL System.@FreeMem - - POP ECX - POP EBX - POP EDI - POP ESI - -end; - -function _NewControl( AParent: PControl; ControlClassName: PKOLChar; - Style: DWORD; Ctl3D: Boolean; - Actions: TCommandActionsParam ): PControl; -const szActions = sizeof(TCommandActions); -asm - PUSH EBX - PUSH EAX // push AParent - PUSH ECX // push Style - MOVZX ECX, [Ctl3D] - PUSH [Actions] - CALL _NewWindowed - XCHG EBX, EAX - {$IFDEF USE_FLAGS} - OR [EBX].TControl.fFlagsG3, (1 shl G3_IsControl) - {$ELSE} - INC [EBX].TControl.fIsControl - {$ENDIF} - POP EDX // pop Style - OR EDX, WS_CLIPSIBLINGS or WS_CLIPCHILDREN - //INC [EBX].TControl.fVerticalAlign - MOV byte ptr [EBX].TControl.fLookTabKeys, $0F - TEST [EBX].TControl.fCtl3D_child, 1 - JZ @@noCtl3D - AND EDX, not WS_BORDER - OR byte ptr [EBX].TControl.fExStyle + 1, WS_EX_CLIENTEDGE shr 8 -@@noCtl3D: - MOV [EBX].TControl.fStyle, EDX - {$IFDEF USE_FLAGS} - {$ELSE} - TEST EDX, WS_VISIBLE - SETNZ AL - MOV [EBX].TControl.fVisible, AL - TEST EDX, WS_TABSTOP - SETNZ AL - MOV [EBX].TControl.fTabstop, AL - {$ENDIF USE_FLAGS} - POP ECX // pop AParent - JECXZ @@noParent - - PUSH ESI - PUSH EDI - PUSH ECX - LEA ESI, [ECX].TControl.fMargin - LEA EDI, [EBX].TControl.fBoundsRect - LODSB - MOVSX EAX, AL - {$IFNDEF SMALLEST_CODE} - PUSH EAX - MOVSX ECX, byte ptr [ESI+2] - ADD EAX, ECX // AParent.fClientLeft - {$ENDIF} - STOSD // fBoundsRect.Left - {$IFNDEF SMALLEST_CODE} - POP EAX - PUSH EAX - MOVSX ECX, byte ptr [ESI+0] - ADD EAX, ECX // AParent.fClientTop - {$ENDIF} - STOSD // fBoundsRect.Top - {$IFNDEF SMALLEST_CODE} - XCHG EDX, EAX - POP EAX - {$ENDIF} - ADD EAX, 64 - STOSD // fBoundsRect.Right - {$IFNDEF SMALLEST_CODE} - XCHG EAX, EDX - ADD EAX, 64 - {$ENDIF} - STOSD // fBoundsRect.Bottom} - POP ECX - MOV EAX, [ECX].TControl.fCursor - STOSD - POP EDI - POP ESI - - XCHG EAX, ECX - CALL TControl.ParentForm - XCHG ECX, EAX - JECXZ @@noParentForm - INC [ECX].TControl.fTabOrder - MOV DX, WORD PTR [ECX].TControl.fTabOrder - MOV WORD PTR [EBX].TControl.fTabOrder, DX - TEST [EBX].TControl.fStyle, WS_TABSTOP - JZ @@CurrentControl_set - CMP [ECX].TControl.DF.fCurrentControl, 0 - JNZ @@CurrentControl_set - MOV [ECX].TControl.DF.fCurrentControl, EBX -@@CurrentControl_set: -@@noParentForm: -@@noParent: - MOVZX EDX, [CtlIdCount] - INC [CtlIdCount] - MOV [EBX].TControl.fMenu, EDX - MOV EDX, offset[WndProcCtrl] - MOV EAX, EBX - CALL TControl.AttachProc - XCHG EAX, EBX - POP EBX - {$IFDEF DEBUG_ALTSPC} - PUSH EAX - CALL DumpWindowed - POP EAX - {$ENDIF} -end; - -const StaticClass: Array[0..6] of AnsiChar=('S','T','A','T','I','C',#0); -function NewLabel( AParent: PControl; const Caption: KOLString ): PControl; -asm - PUSH EDX - - PUSH 0 - {$IFDEF PACK_COMMANDACTIONS} - PUSH [LabelActions_Packed] - {$ELSE} - PUSH offset[LabelActions] - {$ENDIF} - MOV ECX, WS_VISIBLE or WS_CHILD or SS_LEFTNOWORDWRAP or SS_NOPREFIX or SS_NOTIFY - MOV EDX, offset[StaticClass] - CALL _NewControl - MOV word ptr [EAX].TControl.aAutoSzX, $101 - {$IFDEF USE_FLAGS} - OR [EAX].TControl.fFlagsG1, (1 shl G1_SizeRedraw) or (1 shl G1_IsStaticControl) - {$ELSE} - INC [EAX].TControl.fIsStaticControl - INC [EAX].TControl.fSizeRedraw - {$ENDIF} - MOV EDX, [EAX].TControl.fBoundsRect.Top - ADD EDX, 22 - MOV [EAX].TControl.fBoundsRect.Bottom, EDX - POP EDX - PUSH EAX - CALL TControl.SetCaption - POP EAX - -{$IFDEF GRAPHCTL_XPSTYLES} - PUSH EAX - MOV EDX, offset[XP_Themes_For_Label] - CALL Attach_WM_THEMECHANGED - POP EAX -{$ENDIF} -end; - -function NewGroupbox( AParent: PControl; const Caption: KOLString ): PControl; -asm - PUSH EDX - PUSH 0 - {$IFDEF PACK_COMMANDACTIONS} - PUSH [ButtonActions_Packed] - {$ELSE} - PUSH offset[ButtonActions] - {$ENDIF} - MOV EDX, offset[ButtonClass] - MOV ECX, WS_VISIBLE or WS_CHILD or BS_GROUPBOX or WS_CLIPCHILDREN or WS_CLIPSIBLINGS - CALL _NewControl - OR [EAX].TControl.fExStyle, WS_EX_CONTROLPARENT - MOV EDX, [EAX].TControl.fBoundsRect.Left - ADD EDX, 100 - MOV [EAX].TControl.fBoundsRect.Right, EDX - MOV EDX, [EAX].TControl.fBoundsRect.Top - ADD EDX, 100 - MOV [EAX].TControl.fBoundsRect.Bottom, EDX - MOV byte ptr [EAX].TControl.fClientTop, 22 - XOR EDX, EDX - {$IFDEF USE_FLAGS} - AND [EAX].TControl.fStyle.f2_Style, not(1 shl F2_Tabstop) - {$ELSE} - MOV [EAX].TControl.fTabstop, DL - {$ENDIF USE_FLAGS} - MOV DL, 2 - ADD [EAX].TControl.fClientBottom, DL - ADD [EAX].TControl.fClientLeft, DL - ADD [EAX].TControl.fClientRight, DL - POP EDX - PUSH EAX - CALL TControl.SetCaption - POP EAX - PUSH EAX - {$IFDEF USE_FLAGS} - OR [EAX].TControl.fFlagsG5, 1 shl G5_IsGroupbox - {$ELSE} - INC [EAX].TControl.fIsGroupBox - {$ENDIF} - MOV EDX, offset[WndProcDoEraseBkgnd] - CALL TControl.AttachProc - POP EAX - -{$IFDEF GRAPHCTL_XPSTYLES} - PUSH EAX - MOV EDX, offset[XP_Themes_For_GroupBox] - CALL Attach_WM_THEMECHANGED - POP EAX -{$ENDIF} -end; - -function NewPanel( AParent: PControl; EdgeStyle: TEdgeStyle ): PControl; -const CreateStyle = WS_VISIBLE or WS_CHILD or SS_LEFTNOWORDWRAP or - SS_NOPREFIX or SS_NOTIFY; -asm -{$IFDEF GRAPHCTL_XPSTYLES} - MOVZX EDX, EdgeStyle - PUSH EDX -{$ENDIF} - - PUSH EDX - MOV EDX, offset[StaticClass] - MOV ECX, CreateStyle - PUSH 0 - {$IFDEF PACK_COMMANDACTIONS} - PUSH [LabelActions_Packed] - {$ELSE} - PUSH offset[LabelActions] - {$ENDIF} - CALL _NewControl - //INC byte ptr [EAX].TControl.aAutoSzX - //INC byte ptr [EAX].TControl.aAutoSzY - MOV word ptr [EAX].TControl.aAutoSzX, $101 - ADD [EAX].TControl.fBoundsRect.Right, 100-64 - ADD [EAX].TControl.fBoundsRect.Bottom, 100-64 - OR byte ptr [EAX].TControl.fExStyle+2, 1 - POP ECX - CMP CL, 1 - JG @@exit - JE @@sunken - OR byte ptr [EAX].TControl.fStyle+2, $40 -{$IFDEF GRAPHCTL_XPSTYLES} - JMP @@visual -{$ELSE} - RET -{$ENDIF} -@@sunken: - OR byte ptr [EAX].TControl.fStyle+1, $10 -@@exit: - -{$IFDEF GRAPHCTL_XPSTYLES} -@@visual: - CMP AppTheming, TRUE - JNE @@es_none_ - CMP CL, 1 - JG @@es_none_ - JE @@not_sunken - AND byte ptr [EAX].TControl.fStyle+2, $00 - JNE @@es_none_ -@@not_sunken: - AND byte ptr [EAX].TControl.fStyle+1, $00 -@@es_none_: - POP EDX - PUSH EAX - CALL TControl.SetEdgeStyle - POP EAX - PUSH EAX - MOV EDX, offset[XP_Themes_For_Panel] - CALL Attach_WM_THEMECHANGED - POP EAX -{$ENDIF} -end; - -const ListBoxClass : Array[ 0..7 ] of AnsiChar = ( 'L','I','S','T','B','O','X',#0 ); -function NewListbox( AParent: PControl; Options: TListOptions ): PControl; -asm - PUSH EAX - PUSH EDX - MOV EAX, ESP - MOV EDX, offset[ListFlags] - XOR ECX, ECX - MOV CL, 11 - CALL MakeFlags - POP EDX - OR EAX, WS_VISIBLE or WS_CHILD or WS_TABSTOP or WS_BORDER or WS_VSCROLL or LBS_NOTIFY - XCHG ECX, EAX - POP EAX - PUSH 1 - {$IFDEF PACK_COMMANDACTIONS} - PUSH [ListActions_Packed] - {$ELSE} - PUSH offset[ListActions] - {$ENDIF} - MOV EDX, offset[ListBoxClass] - CALL _NewControl - {$IFDEF PACK_COMMANDACTIONS} - MOV EDX, [EAX].TControl.fCommandActions - MOV [EDX].TCommandActionsObj.aClear, offset[ClearListbox] - {$ENDIF} - ADD [EAX].TControl.fBoundsRect.Right, 100 - ADD [EAX].TControl.fBoundsRect.Bottom, 200-64 - MOV [EAX].TControl.fColor, clWindow - MOV [EAX].TControl.fLookTabKeys, 3 -end; - -procedure CreateComboboxWnd( Combo: PControl ); -//const PrevProcStr: PAnsiChar = 'PREV_PROC'; //************ Remarked By M.Gerasimov -asm - PUSH EDI - PUSH EBX - XCHG EBX, EAX - PUSH GW_CHILD - PUSH [EBX].TControl.fHandle -@@getwindow: - CALL GetWindow - TEST EAX, EAX - JZ @@fin - PUSH offset[WndFuncCombo] - PUSH GWL_WNDPROC - PUSH EAX - XCHG EDI, EAX - CALL SetWindowLong - PUSH EAX - PUSH offset [ID_PREVPROC] // - PUSH EDI - CALL SetProp -@@2getnext: - PUSH GW_HWNDNEXT - PUSH EDI - JMP @@getwindow -@@fin: POP EBX - POP EDI -end; - -{$IFDEF WNDPROCTREEVIEW_OLDASMVERSION} -function WndProcTreeView( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean; -asm //cmd //opd - CMP word ptr [EDX].TMsg.message, WM_NOTIFY - JNZ @@ret_false - PUSH EBX - XCHG EBX, EAX - MOV EDX, [EDX].TMsg.lParam - {$IFDEF EVENTS_DYNAMIC} - MOV EAX, [EBX].TControl.EV - LEA EAX, [EAX].TEvents.fOnTVBeginDrag - {$ELSE} - LEA EAX, [EBX].TControl.EV.fOnTVBeginDrag - {$ENDIF} - CMP word ptr [EDX].TNMTreeView.hdr.code, NM_RCLICK - JNE @@chk_TVN_BEGINDRAG - PUSH ECX - PUSH ECX - PUSH ESP - CALL GetCursorPos - MOV EAX, EBX - MOV EDX, ESP - MOV ECX, EDX - CALL TControl.Screen2Client - POP EAX - AND EAX, $FFFF - POP EDX - SHL EDX, 16 - OR EAX, EDX - PUSH EAX - CALL GetShiftState - PUSH EAX - PUSH WM_RBUTTONUP - PUSH [EBX].TControl.fHandle - CALL PostMessage - JMP @@2fin_false1 - -@@chk_TVN_BEGINDRAG: - {$IFDEF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINDRAGW - JZ @@event_drag - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINRDRAGW - JZ @@event_drag - {$ENDIF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINDRAG - JZ @@event_drag - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINRDRAG - JNZ @@chk_BEGINLABELEDIT -@@event_drag: - MOV EDX, [EDX].TNMTreeView.itemNew.hItem -@@event_call: - MOV ECX, [EAX].TMethod.Code - JECXZ @@2fin_false1 - MOV EAX, [EAX].TMethod.Data - XCHG EBX, ECX - XCHG EDX, ECX - CALL EBX -@@2fin_false1: JMP @@fin_false -@@chk_BEGINLABELEDIT: - {$IFDEF EVENTS_DYNAMIC} - MOV EAX, [EBX].TControl.EV - LEA EAX, [EAX].TEvents.FOnTVBeginEdit - {$ELSE} - LEA EAX, [EBX].TControl.EV.fOnTVBeginEdit - {$ENDIF} - {$IFDEF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDITW - JZ @@beginlabeledit - {$ENDIF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDIT - JNZ @@chk_ITEMEXPANDED //@@chk_DELETEITEM -@@beginlabeledit: - {$IFDEF USE_FLAGS} - TEST [EBX].TControl.fFlagsG6, 1 shl G6_Dragging - {$ELSE} - CMP [EBX].TControl.fDragging, 0 - {$ENDIF} - JZ @@allow_LABELEDIT - XOR EAX, EAX - INC EAX - MOV [ECX], EAX - JMP @@ret_true - -@@allow_LABELEDIT: - PUSH ECX // @Rslt - - MOV ECX, [EAX].TMethod.Code - JECXZ @@2fin_false1 - PUSH EBX - XCHG EBX, ECX - MOV EDX, [EDX].TTVDispInfo.item.hItem - XCHG EDX, ECX - MOV EAX, [EAX].TMethod.Data - CALL EBX - TEST AL, AL - SETZ AL // Rslt := not event result; - POP EBX - JMP @@ret_EAX - -@@call_EBX: - CALL EBX -@@2fin_false: - JMP @@fin_false -@@chk_ITEMEXPANDED: - {$IFDEF EVENTS_DYNAMIC} - MOV EAX, [EBX].TControl.EV - LEA EAX, [EAX].TEvents.fOnTVExpanded - {$ELSE} - LEA EAX, [EBX].TControl.EV.fOnTVExpanded - {$ENDIF} - {$IFDEF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDEDW - JZ @@itemexpanded - {$ENDIF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDED - JNZ @@chk_SELCHANGING -@@itemexpanded: - MOV ECX, [EAX].TMethod.Code - JECXZ @@2fin_false - CMP [EDX].TNMTreeView.action, TVE_EXPAND - PUSH ECX - SETZ CL - XCHG ECX, [ESP] - JMP @@event_drag -@@chk_SELCHANGING: - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_SELCHANGING - JNE @@chk_ITEMEXPANDING - XCHG EAX, ECX - {$IFDEF EVENTS_DYNAMIC} - MOV ECX, [EBX].TControl.EV - MOV ECX, [ECX].TEvents.fOnTVSelChanging.TMethod.Code - {$ELSE} - MOV ECX, [EBX].TControl.EV.fOnTVSelChanging.TMethod.Code - {$ENDIF} -@@2fin_false2: - JECXZ @@2fin_false - PUSH EAX //@Rslt - PUSH [EDX].TNMTreeView.itemNew.hItem - XCHG ECX, EBX //EBX=OnTVSelChanging.Code ECX=Sender - XCHG ECX, EDX //EDX=Sender ECX=Msg - MOV ECX, [ECX].TNMTreeView.itemOld.hItem - {$IFDEF EVENTS_DYNAMIC} - MOV EAX, [EDX].TControl.EV - MOV EAX, [EAX].TEvents.fOnTVSelChanging.TMethod.Data - {$ELSE} - MOV EAX, [EDX].TControl.EV.fOnTVSelChanging.TMethod.Data - {$ENDIF} - CALL EBX - XOR AL, 1 - MOVZX EAX, AL - JMP @@ret_EAX - -@@chk_ITEMEXPANDING: - {$IFDEF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDINGW - JZ @@itemexpanding - {$ENDIF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDING - JNE @@chk_ENDLABELEDIT -@@itemexpanding: - XCHG EAX, ECX - {$IFDEF EVENTS_DYNAMIC} - MOV ECX, [EBX].TControl.EV - MOV ECX, [ECX].TEvents.fOnTVExpanding.TMethod.Code - {$ELSE} - MOV ECX, [EBX].TControl.EV.fOnTVExpanding.TMethod.Code - {$ENDIF} - JECXZ @@2fin_false2 - PUSH EAX // @Rslt - CMP [EDX].TNMTreeView.action, TVE_EXPAND - PUSH ECX - SETZ CL - XCHG ECX, [ESP] - XCHG ECX, EBX //EBX=OnTVExpanding.Code ECX=Seneder - XCHG EDX, ECX //ECX=Msg EDX=Sender - MOV ECX, [ECX].TNMTreeView.itemNew.hItem //ECX=Item - {$IFDEF EVENTS_DYNAMIC} - MOV EAX, [EDX].TControl.EV - MOV EAX, [EAX].TEvents.fOnTVExpanding.TMethod.Data - {$ELSE} - MOV EAX, [EDX].TControl.EV.fOnTVExpanding.TMethod.Data //EAX=object - {$ENDIF} -@@111: - CALL EBX -@@ret_EAX: - POP EDX //EDX=@Rslt - MOVZX EAX, AL - NEG EAX - MOV [EDX], EAX -@@ret_true: - MOV AL, 1 - POP EBX - RET -@@chk_ENDLABELEDIT: - {$IFDEF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ENDLABELEDITW - JZ @@endlabeledit - {$ENDIF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_ENDLABELEDIT - JNZ @@chk_SELCHANGED -@@endlabeledit: - XCHG EAX, ECX - {$IFDEF EVENTS_DYNAMIC} - MOV ECX, [EBX].TControl.EV - MOV ECX, [ECX].TEvents.fOnTVEndEdit.TMethod.Code - {$ELSE} - MOV ECX, [EBX].TControl.EV.fOnTVEndEdit.TMethod.Code - {$ENDIF} - JECXZ @@ret_1 - PUSH EAX - PUSH EBX - PUSH 0 - - XCHG EDX, EBX - MOV EAX, [EBX].TTVDispInfo.item.pszText - PUSH EDX - PUSH ECX - XCHG EAX, EDX - {$IFDEF UNICODE_CTRLS} - CMP [EBX].TNMTreeView.hdr.code, TVN_ENDLABELEDITW - JNZ @@endlabeleditA - CALL TControl.TVGetItemTextW - JMP @@NewTxt_ready -@@endlabeleditA: - {$ENDIF UNICODE_CTRLS} - TEST EDX, EDX - JNZ @@prepare_NewTxt - // NewTxt := [EDX].TControl.TVItemText[ hItem ] - LEA ECX, [ESP + 8] - MOV EDX, [EBX].TTVDispInfo.item.hItem - CALL TControl.TVGetItemText - JMP @@NewTxt_ready -@@prepare_NewTxt: - LEA EAX, [ESP+8] - {$IFDEF _D2009orHigher} - PUSH ECX - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - {$IFDEF _D2009orHigher} - POP ECX - {$ENDIF} -@@NewTxt_ready: - POP ECX - POP EDX - POP EAX - PUSH EAX - PUSH EAX - {$IFDEF EVENTS_DYNAMIC} - MOV EAX, [EDX].TControl.EV - MOV EAX, [EAX].TEvents.fOnTVEndEdit.TMethod.Data - {$ELSE} - MOV EAX, [EDX].TControl.EV.fOnTVEndEdit.TMethod.Data - {$ENDIF} - MOV EBX, [EBX].TTVDispInfo.item.hItem - XCHG ECX, EBX - CALL EBX - XCHG EBX, EAX - CALL RemoveStr - XCHG EAX, EBX - POP EBX - JMP @@ret_EAX -@@ret_1: - INC ECX - MOV [EAX], ECX - JMP @@ret_true - -@@chk_SELCHANGED: - {$IFDEF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_SELCHANGEDW - JZ @@selchanged - {$ENDIF UNICODE_CTRLS} - CMP word ptr [EDX].TNMTreeView.hdr.code, TVN_SELCHANGED - JNZ @@fin_false -@@selchanged: - XCHG EAX, EBX - CALL TControl.DoSelChange - -@@fin_false: - POP EBX -@@ret_false: - XOR EAX, EAX -end; -{$ELSE NEW VERSION OF WndProcTreeView} -function WndProcTreeView( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean; -asm - PUSH ESI - PUSH EDI - MOV EDI, ECX // EDI -> Rslt - XOR ECX, ECX - CMP WORD PTR [EDX].TMsg.message, WM_NOTIFY - JNZ @@ret_false1 - XCHG ESI, EAX - MOV EDX, [EDX].TMsg.lParam - CMP WORD PTR [EDX].TNMTreeView.hdr.code, NM_RCLICK - JNE @@chk_TVN_BEGINDRAG - PUSH ECX - PUSH ECX - PUSH ESP - CALL GetCursorPos - MOV EAX, ESI - MOV EDX, ESP - MOV ECX, EDX - CALL TControl.Screen2Client - POP EDX - POP EAX - SHLD EAX, EDX, 16 - PUSH EAX - CALL GetShiftState - PUSH EAX - PUSH WM_RBUTTONUP - PUSH ESI - CALL TControl.PostMsg - JMP @@ret_false1 -@@prepareCallEvent: - STC - MOV EDX, ESI - {$IFDEF EVENTS_DYNAMIC} - MOV ESI, [ESI].TControl.EV - LEA ECX, [ESI+ECX*8].TEvents.fOnTVBeginDrag - {$ELSE} - LEA ECX, [ESI+ECX*8].TControl.EV.fOnTVBeginDrag - {$ENDIF} - MOV EAX, [ECX].TMethod.Data - MOV ECX, [ECX].TMethod.Code - JECXZ @@noEvent - MOV ESI, ECX - AND EAX, EAX -@@noEvent: - RET -@@chk_TVN_BEGINDRAG: /////////////////////////////////////////////////////////// - CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINDRAG - JE @@beginDrag - CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINRDRAG - JNE @@chk_TVNBEGINLABELEDIT -@@beginDrag: - PUSH [EDX].TNMTreeView.itemNew.hItem - CALL @@prepareCallEvent - POP ECX - JC @@ret_false1 -@@justEventCall: - CALL ESI -@@RsltEAX_ResultFalse: - MOV [EDI], EAX - XOR EAX, EAX - POP EDI - POP ESI - RET -@@chk_TVNBEGINLABELEDIT: /////////////////////////////////////////////////////// - INC ECX // -> FOnTVBeginEdit - CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_BEGINLABELEDIT - JNE @@chk_ENDLABELEDIT - /////////////////////////////////////////////////////////////////////// - XOR EAX, EAX - INC EAX - {$IFDEF USE_FLAGS} - TEST [ESI].TControl.fFlagsG6, 1 shl G6_Dragging - {$ELSE} - CMP [ESI].TControl.fDragging, 0 - {$ENDIF} - JNZ @@rsltEAX_ResultTrue - PUSH [EDX].TTVDispInfo.item.hItem - CALL @@prepareCallEvent - POP ECX - JC @@ret_false1 - CALL ESI - XOR AL, 1 //+Dufa -@@rsltEAX_ResultTrue: - MOV [EDI], AL //+VK -@@ResultTrue: - MOV AL, 1 - POP EDI - POP ESI - RET -@@chk_ENDLABELEDIT: - INC ECX // -> fOnTVEndEdit - CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_ENDLABELEDIT - JNE @@chk_ITEMEXPANDING - MOV EAX, [EDX].TTVDispInfo.item.pszText - TEST EAX, EAX - JZ @@ResultTrue - PUSH EAX - PUSH [EDX].TTVDispInfo.item.hItem - CALL @@prepareCallEvent - POP ECX - //JNC @@justEventCall ---//dufa - JC @@ret_false1 //dufa - CALL ESI //dufa - JMP @@rsltEAX_ResultTrue //dufa -@@Rslt1_ResultTrue: - XOR EAX, EAX - INC EAX - JMP @@RsltEAX_ResultFalse -@@chk_ITEMEXPANDING: /////////////////////////////////////////////////////////// - INC ECX // -> FOnTVExpanding - CMP WORD PTR [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDING - JNE @@chk_ITEMEXPANDED -@@expanding_expanded: - CMP [EDX].TNMTreeView.action, TVE_EXPAND - SETZ AL - PUSH EAX - PUSH [EDX].TNMTreeView.itemNew.hItem -@@event3: - CALL @@prepareCallEvent - POP ECX - JNC @@justEventCall - POP EAX - JMP @@ret_false1 -@@chk_ITEMEXPANDED: //////////////////////////////////////////////////////////// - INC ECX // -> FOnTVExpanded - CMP [EDX].TNMTreeView.hdr.code, TVN_ITEMEXPANDED - JE @@expanding_expanded - /////////////////////////////////////////////////////////////////////// - INC ECX // -> FOnTVSelChanging - CMP [EDX].TNMTreeView.hdr.code, TVN_SELCHANGING - JNE @@chk_TVN_SELCHANGED - PUSH [EDX].TNMTreeView.itemNew.hItem - PUSH [EDX].TNMTreeView.itemOld.hItem - JMP @@event3 -@@chk_TVN_SELCHANGED: - CMP [EDX].TNMTreeView.hdr.code, TVN_SELCHANGED - JNE @@ret_false1 - XCHG EAX, ESI - CALL TControl.DoSelChange -@@ret_false1: - XOR EAX, EAX - POP EDI - POP ESI -end; -{$ENDIF} - -function NewTabControl( AParent: PControl; const Tabs: array of PKOLChar; Options: TTabControlOptions; - ImgList: PImageList; ImgList1stIdx: Integer ): PControl; -const lenf=high(TabControlFlags); //+++ -asm //cmd //opd - PUSH EBX - PUSH ESI - PUSH EDI - XCHG EBX, EAX - PUSH EDX - PUSH ECX - LEA EAX, [Options] - MOV EDX, offset[TabControlFlags] - XOR ECX, ECX - MOV CL, lenf - CALL MakeFlags - TEST byte ptr [Options], 4 - JZ @@0 - OR EAX, WS_TABSTOP or TCS_FOCUSONBUTTONDOWN -@@0: OR EAX, WS_CHILD or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or WS_VISIBLE - XCHG ECX, EAX - XCHG EAX, EBX - MOV EDX, offset[WC_TABCONTROL] - PUSH 1 - {$IFDEF PACK_COMMANDACTIONS} - PUSH [TabControlActions_Packed] - {$ELSE} - PUSH offset[TabControlActions] - {$ENDIF} - CALL _NewCommonControl - MOV EBX, EAX - TEST [Options], 2 shl (tcoBorder - 1) - JNZ @@borderfixed - AND [EBX].TControl.fExStyle, not WS_EX_CLIENTEDGE -@@borderfixed: - MOV EDX, offset[WndProcTabControl] - CALL TControl.AttachProc - ADD [EBX].TControl.fBoundsRect.Right, 100-64 - ADD [EBX].TControl.fBoundsRect.Bottom, 100-64 - MOV ECX, [ImgList] - JECXZ @@2 - XCHG EAX, ECX - CALL TImageList.GetHandle - PUSH EAX - PUSH 0 - PUSH TCM_SETIMAGELIST - PUSH EBX - CALL TControl.Perform -@@2: - POP EDI // EDI = High(Tabs) - POP ESI // ESI = Tabs - XOR EDX, EDX // EDX := 0 (=I) - MOV EAX, [ImgList1stIdx] //(=II) -@@loop: - CMP EDX, EDI - JG @@e_loop - PUSH EAX - PUSH EDX - PUSH EAX - LODSD - XCHG ECX, EAX - MOV EAX, EBX - CALL TControl.TC_Insert - POP EDX - POP EAX - INC EAX - INC EDX - JMP @@loop -@@e_loop: - MOV byte ptr [EBX].TControl.fLookTabKeys, 1 - XCHG EAX, EBX - POP EDI - POP ESI - POP EBX -end; - -function NewToolbar( AParent: PControl; Align: TControlAlign; Options: TToolbarOptions; - Bitmap: HBitmap; const Buttons: array of PKOLChar; - const BtnImgIdxArray: array of Integer ) : PControl; -const szTBButton = Sizeof( TTBButton ); - Option3DBorder = 1 shl Ord( tbo3DBorder ); -asm //cmd //opd - PUSH EDI - MOVZX EDX, DL - PUSH EDX // Align - PUSH EAX // AParent - - XOR EAX, EAX - TEST CL, Option3DBorder - SETNZ AL - PUSH EAX - - PUSH ECX // Options - - MOV AL, ICC_BAR_CLASSES - CALL DoInitCommonControls - - MOV EAX, ESP - MOV EDX, offset[ToolbarOptions] - XOR ECX, ECX - MOV CL, 6 - CALL MakeFlags - POP EDX - - {$IFDEF COMMANDACTIONS_OBJ} - PUSH TOOLBAR_ACTIONS - {$ELSE} - PUSH 0 //: actions : = nil - {$ENDIF} - XCHG ECX, EAX // ECX = MakeFlags(...) - MOV EDI, ECX - MOV EAX, [ESP+8] // EAX = AParent - MOV EDX, [ESP+12] // EDX = Align - OR ECX, [EDX*4+offset ToolbarAligns] - OR ECX, WS_CHILD or WS_VISIBLE or TBSTYLE_TOOLTIPS - MOV EDX, offset[ TOOLBARCLASSNAME ] - CALL _NewCommonControl - {$IFDEF COMMANDACTIONS_OBJ} - MOV EDX, [EAX].TControl.fCommandActions - MOV [EDX].TCommandActionsObj.aClear, offset[ClearToolbar] - MOV [EDX].TCommandActionsObj.aGetCount, TB_BUTTONCOUNT - {$ELSE} - MOV [EAX].TControl.fCommandActions.aClear, offset[ClearToolbar] - MOV [EAX].TControl.fCommandActions.aGetCount, TB_BUTTONCOUNT - {$ENDIF} - {$IFDEF USE_FLAGS} - OR [EAX].TControl.fFlagsG5, 1 shl G5_IsButton - {$ELSE} - INC [EAX].TControl.fIsButton - {$ENDIF} - POP EDX // pop AParent - POP EDX // EDX = Align - PUSH EDX - TEST EDX, EDX - JE @@zero_bounds - ADD [EAX].TControl.fBoundsRect.Bottom, 26-64 - ADD [EAX].TControl.fBoundsRect.Right, 1000-64 - JMP @@bounds_ready -@@zero_bounds: - MOV [EAX].TControl.fBoundsRect.Left, EDX - MOV [EAX].TControl.fBoundsRect.Top, EDX - MOV [EAX].TControl.fBoundsRect.Right, EDX - MOV [EAX].TControl.fBoundsRect.Bottom, EDX -@@bounds_ready: - PUSH EBX - PUSH ESI - XCHG EBX, EAX - MOV ESI, offset[TControl.Perform] - PUSH 0 - PUSH 0 - PUSH TB_GETEXTENDEDSTYLE - PUSH EBX - CALL ESI - OR EAX, TBSTYLE_EX_DRAWDDARROWS - PUSH EAX - PUSH 0 - PUSH TB_SETEXTENDEDSTYLE - PUSH EBX - CALL ESI - MOV EDX, offset[WndProcToolbarCtrl] - MOV EAX, EBX - CALL TControl.AttachProc - MOV EDX, offset[WndProcDoEraseBkgnd] - MOV EAX, EBX - CALL TControl.AttachProc - PUSH 0 - PUSH szTBButton - PUSH TB_BUTTONSTRUCTSIZE - PUSH EBX - CALL ESI - PUSH 0 - MOVSX EAX, [EBX].TControl.fMargin - PUSH EAX - PUSH TB_SETINDENT - PUSH EBX - CALL ESI - MOV EAX, [ESP+8] // Align - {$IFDEF PARANOIA} DB $2C, 1 {$ELSE} SUB AL, 1 {$ENDIF} - JL @@bounds_correct - JE @@corr_right - {$IFDEF PARANOIA} DB $2C, 2 {$ELSE} SUB AL, 2 {$ENDIF} - JNE @@corr_bottom - @@corr_right: - MOV EDX, [EBX].TControl.fBoundsRect.Left - ADD EDX, 24 - MOV [EBX].TControl.fBoundsRect.Right, EDX - JMP @@bounds_correct - @@corr_bottom: - MOV EDX, [EBX].TControl.fBoundsRect.Top - ADD EDX, 22 - MOV [EBX].TControl.fBoundsrect.Bottom, EDX - @@bounds_correct: - {$IFnDEF TBBUTTONS_DFLT_NOAUTOSIZE} - MOV byte ptr [EBX].TControl.DF.fDefaultTBBtnStyle, TBSTYLE_AUTOSIZE - {$ENDIF} - MOV EDX, [Bitmap] - TEST EDX, EDX - JZ @@bitmap_added - MOV EAX, EBX - CALL TControl.TBAddBitmap - @@bitmap_added: - - PUSH dword ptr [BtnImgIdxArray] - PUSH dword ptr [BtnImgIdxArray-4] - MOV ECX, [Buttons-4] - MOV EDX, [Buttons] - MOV EAX, EBX - CALL TControl.TBAddButtons - - PUSH 0 - PUSH 0 - PUSH WM_SIZE - PUSH EBX - CALL ESI - // --- - {+|ecm|} - // --- - MOV EDX,EDI - OR EDX,[EBX].TControl.FStyle - MOV EAX,EBX - CALL TControl.SetStyle - // --- - {/+|ecm|} - // --- - XCHG EAX, EBX - POP ESI - POP EBX - POP EDX - POP EDI -end; - -function WndProcDateTimePickerNotify( Self_: PControl; var Msg: TMsg; var Rslt: Integer ): Boolean; -type - TStrStr = record - param_Date: TDateTime; - param_PtrToAccept: PInteger; - Accept: Integer; - UserString: String; - end; -const Size_TStrStr = sizeof( TStrStr ); -asm - PUSH ESI - PUSH EDI - MOV EDI, EDX - CMP WORD PTR [EDI].TMsg.message, WM_NOTIFY - JNZ @@ret_false - {$IFDEF EVENTS_DYNAMIC} - MOV ESI, [EAX].TControl.EV - {$ENDIF} - MOV ECX, [EDI].TMsg.lParam - MOV EDX, [ECX].TNMHdr.code - CMP EDX, DTN_DROPDOWN - JNZ @@chk_DTN_CLOSEUP - {$IFDEF EVENTS_DYNAMIC} - LEA ECX, [ESI].TEvents.fOnDropDown.TMethod.Code - {$ELSE} - LEA ECX, [EAX].TControl.EV.fOnDropDown.TMethod.Code - {$ENDIF} -@@event1: - MOV EDX, [ECX].TMethod.Data - MOV ECX, [ECX].TMethod.Code - {$IFDEF NIL_EVENTS} - JECXZ @@ret_false - {$ENDIF} - XCHG EAX, EDX - CALL ECX - JMP @@ret_false -@@chk_DTN_CLOSEUP: ///////////////////////////////////////////////////////////// - {$IFDEF EVENTS_DYNAMIC} - LEA ECX, [ESI].TEvents.fOnCloseUp.TMethod.Code - {$ELSE} - LEA ECX, [EAX].TControl.EV.fOnCloseUp.TMethod.Code - {$ENDIF} - CMP EDX, DTN_CLOSEUP - JE @@event1 -//////////////////////////////////////////////////////////////////////////////// - {$IFDEF EVENTS_DYNAMIC} - LEA ECX, [ESI].TEvents.fOnChangeCtl.TMethod.Code - {$ELSE} - LEA ECX, [EAX].TControl.EV.fOnChangeCtl.TMethod.Code - {$ENDIF} - CMP EDX, DTN_DATETIMECHANGE - JE @@event1 - CMP EDX, DTN_USERSTRING - JNE @@ret_false -//////////////////////////////////////////////////////////////////////////////// - {$IFDEF EVENTS_DYNAMIC} - MOV ECX, [ESI].TEvents.fOnDTPUserString.TMethod.Code - MOV EDX, [ESI].TEvents.fOnDTPUserString.TMethod.Data - {$ELSE} - MOV ECX, [EAX].TControl.EV.fOnDTPUserString.TMethod.Code - MOV EDX, [EAX].TControl.EV.fOnDTPUserString.TMethod.Data - {$ENDIF} - {$IFDEF NIL_EVENTS} - JECXZ @@ret_false - {$ENDIF} - SUB ESP, Size_TStrStr - MOV ESI, ESP - PUSHAD - CALL TControl.GetDateTime - FSTP QWORD PTR [ESI].TStrStr.param_Date - WAIT - //POPAD - //PUSHAD - LEA EAX, [ESI].TStrStr.UserString - AND dword ptr [EAX], 0 - MOV EDI, [EDI].TMsg.lParam - MOV EDX, [EDI].TNMDateTimeString.pszUserString - CALL System.@LStrFromPChar - LEA EAX, [ESI].TStrStr.Accept - MOV byte ptr [EAX], 1 - MOV [ESI].TStrStr.param_PtrToAccept, EAX - POPAD - MOV ESI, ECX - MOV ECX, [ESI].TStrStr.UserString - XCHG EAX, EDX - CALL ESI - MOV EAX, [ESP].TStrStr.Accept - AND EAX, 1 - MOV [EDI].TNMDateTimeString.dwFlags, EAX - LEA EAX, [ESI].TStrStr.UserString - CALL System.@LStrClr - ADD ESP, Size_TStrStr -@@ret_false: - XOR EAX, EAX - POP EDI - POP ESI -end; - -function TControl.GetWindowHandle: HWnd; -asm - MOV ECX, [EAX].fHandle - JECXZ @@1 - XCHG EAX, ECX - RET -@@1: - PUSH EBX - MOV EBX, EAX - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG4, 1 shl G4_CreateVisible - {$ELSE} - CMP [EBX].fCreateVisible, 0 - {$ENDIF} - JNZ @@2 - - XOR EDX, EDX - CALL TControl.Set_Visible - - MOV EAX, EBX - CALL CallTControlCreateWindow - { This is a call to Pascal piece of code, which - calls virtual method TControl.CreateWindow } - - {$IFDEF USE_FLAGS} - OR [EBX].fFlagsG4, 1 shl G4_CreateHidden - {$ELSE} - INC [EBX].fCreateHidden - {$ENDIF} - JMP @@0 - -@@2: CALL CallTControlCreateWindow -@@0: MOV EAX, [EBX].fHandle - POP EBX -end; - -function TControl.CreateWindow: Boolean; -type PCreateWndParams = ^TCreateWndParams; -const - CS_OFF = CS_OWNDC or CS_CLASSDC or CS_PARENTDC or CS_GLOBALCLASS; - CS_ON = 0; //CS_VREDRAW or CS_HREDRAW; - szWndClass = sizeof( TWndClass ); - int_IDC_ARROW = integer( IDC_ARROW ); -asm - PUSH EBX - XCHG EBX, EAX - {$IFDEF DEBUG_CREATEWINDOW} - MOV EAX, EBX - CALL Debug_CreateWindow1 - {$ENDIF} - MOV ECX, [EBX].fParent - JECXZ @@chk_handle - XCHG EAX, ECX - CALL GetWindowHandle - TEST EAX, EAX - JZ @@ret_0 -@@chk_handle: - MOV ECX, [EBX].fHandle - JECXZ @@prepare_Params - MOV EAX, EBX - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG4, 1 shl G4_CreateHidden - {$ELSE} - CMP [EBX].fCreateHidden, 0 - {$ENDIF} - JZ @@create_children - CALL CreateChildWindows - MOV EAX, EBX - MOV DL, 1 - CALL Set_Visible - {$IFDEF USE_FLAGS} - AND [EBX].fFlagsG4, not(1 shl G4_CreateHidden) - {$ELSE} - MOV [EBX].fCreateHidden, 0 - {$ENDIF} - JMP @@ret_true -@@create_children: - CALL CreateChildWindows -@@ret_true: - MOV AL, 1 -@@ret_0: - POP EBX - RET -@@prepare_params: - {$IFDEF USE_GRAPHCTLS} - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG6, 1 shl G6_GraphicCtl - SETNZ AL - JNZ @@ret_0 - {$ELSE} - MOV AL, [EBX].fWindowed - CMP AL, 0 - JZ @@ret_0 - {$ENDIF} - {$ENDIF} - PUSH EBP - MOV EBP, ESP - - PUSH ECX // Params.WindowClass.lpszClassName := nil - PUSH ECX // Params.WindowClass.lpszMenuName := nil - PUSH ECX // Params.WindowClass.hbrBackground := 0 - PUSH int_IDC_ARROW - PUSH ECX - CALL LoadCursor - PUSH EAX // Params.WindowClass.hCursor := LoadCursor( 0, IDC_ARROW ) - XOR ECX, ECX - PUSH ECX // Params.WindowClass.hIcon := 0 - PUSH [hInstance]// Params.WindowClass.hInstance := hInstance - PUSH ECX // Params.WindowClass.cbWndExtra := 0 - PUSH ECX // Params.WindowClass.cbClsExtra := 0 - {$IFDEF SAFE_CODE} - PUSH [EBX].fDefWndProc // Params.WindowClass.lpfnWndProc := fDefWndProc - {$ELSE} - PUSH 0 - {$ENDIF} - PUSH [EBX].fClsStyle // Params.WindowClass.style := fStyle - ADD ESP, -64 - PUSH ECX - MOV EAX, EBX - MOV EDX, ESP - CALL get_ClassName - POP EDX - MOV EAX, ESP - PUSH EDX - //CALL StrPCopy // StrPCopy( Params.WinClsNamBuf, ClassName ) - CALL StrCopy - CALL RemoveStr - PUSH 0 // Params.Param := nil - PUSH [hInstance] // Params.Inst := hInstance - PUSH [EBX].fMenu // Params.Menu := fMenu - MOV DL, 1 - MOV EAX, EBX - CALL GetParentWnd - PUSH EAX // Params.WndParent := GetParentWnd( True ) - - MOV ECX, CW_USEDEFAULT - MOV EAX, [EBX].fBoundsRect.Bottom - MOV EDX, [EBX].fBoundsRect.Top - SUB EAX, EDX - JNZ @@1 - MOV EAX, ECX -@@1: PUSH EAX // Params.Height := Height | CW_UseDefault - MOV EAX, [EBX].fBoundsRect.Right - SUB EAX, [EBX].fBoundsRect.Left - {$IFDEF USE_CMOV} - CMOVZ EAX, ECX - {$ELSE} - JNZ @@2 - MOV EAX, ECX -@@2: {$ENDIF} - - PUSH EAX // Params.Width := Width | CW_UseDefault - MOV EAX, [EBX].fBoundsRect.Left - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG3, 1 shl G3_IsControl - {$ELSE} - CMP [EBX].fIsControl, CL - {$ENDIF} - JNZ @@3 - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG2, (1 shl G2_ChangedPos) - {$ELSE} - TEST byte ptr [EBX].fChangedPosSz, 3 - {$ENDIF USE_FLAGS} - JNZ @@3 - MOV EDX, ECX - XCHG EAX, ECX -@@3: PUSH EDX // Params.Y := Top | CW_UseDefault - PUSH EAX // Params.X := Left | CW_UseDefault - PUSH [EBX].fStyle // Params.Style := fStyle - PUSH [EBX].fCaption // Params.Caption := fCaption - LEA EAX, [ESP+40] - PUSH EAX // Params.WinClassName := @Params.WinClsNamBuf - PUSH [EBX].fExStyle // Params.ExStyle := fExStyle - - MOV ECX, [EBX].fControlClassName - JECXZ @@registerClass - LEA EAX, [ESP].TCreateWndParams.WindowClass - PUSH EAX // @Params.WindowClass - PUSH ECX // fControlClassName - PUSH [hInstance] // hInstance - CALL GetClassInfo - MOV EAX, [ESP].TCreateWndParams.Inst - MOV [ESP].TCreateWndParams.WindowClass.hInstance, EAX - AND [ESP].TCreateWndParams.WindowClass.style, not CS_OFF -@@registerClass: - CMP [EBX].fDefWndProc, 0 - JNE @@fDefWndProc_ready - MOV EAX, [ESP].TCreateWndParams.WindowClass.lpfnWndProc - MOV [EBX].fDefWndProc, EAX -@@fDefWndProc_ready: - MOV ECX, [ESP].TCreateWndParams.WndParent - TEST ECX, ECX - JNZ @@registerClass1 - TEST byte ptr [ESP].TCreateWndParams.Style+3, $40 - XCHG EAX, ECX - JNZ @@fin -@@registerClass1: - MOV EAX, [ESP].TCreateWndParams.WinClassName - MOV EDX, [ESP].TCreateWndParams.WindowClass.hInstance - ADD ESP, -szWndClass - PUSH ESP - PUSH EAX - PUSH EDX - CALL GetClassInfo - ADD ESP, szWndClass - TEST EAX, EAX - JNZ @@registered - MOV EAX, [ESP].TCreateWndParams.WinClassName - MOV [ESP].TCreateWndParams.WindowClass.lpszClassName, EAX - MOV [ESP].TCreateWndParams.WindowClass.lpfnWndProc, offset WndFunc - LEA EAX, [ESP].TCreateWndParams.WindowClass - PUSH EAX - CALL RegisterClass - TEST EAX, EAX - JZ @@fin -@@registered: - MOV [CreatingWindow], EBX - {$IFDEF DEBUG_CREATEWINDOW} - MOV EAX, EBX - MOV EDX, ESP - CALL Debug_CreateWindow2 - {$ENDIF} - CALL CreateWindowEx - MOV [EBX].fHandle, EAX - TEST EAX, EAX - JZ @@fin - PUSH EAX - {$IFDEF USE_PROP} - PUSH offset ID_SELF - {$ELSE} - PUSH GWL_USERDATA - {$ENDIF} - PUSH EAX - - PUSH 0 - PUSH $10002 //UIS_CLEAR or (UISF_HIDEFOCUS shl 16) - PUSH $0128 //WM_UPDATEUISTATE - PUSH EAX - CALL SendMessage - - {$IFDEF USE_PROP} - CALL GetProp - {$ELSE} - CALL GetWindowLong - {$ENDIF} - XCHG ECX, EAX - POP EAX - INC ECX - LOOP @@propSet - MOV [CreatingWindow], ECX - PUSH EBX - {$IFDEF USE_PROP} - PUSH offset ID_SELF - PUSH EAX - CALL SetProp - {$ELSE} - PUSH GWL_USERDATA - PUSH EAX - CALL SetWindowLong - {$ENDIF} -@@propSet: - {$IFDEF SMALLEST_CODE} - {$ELSE} - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG3, 1 shl G3_IsControl - {$ELSE} - CMP [EBX].fIsControl, 0 - {$ENDIF} - JNZ @@iconSet - MOV EAX, EBX - CALL GetIcon - PUSH EAX - PUSH 1 - PUSH WM_SETICON - PUSH EBX - CALL Perform -@@iconSet: - {$ENDIF} - MOV ECX, [EBX].PP.fCreateWndExt - {$IFDEF NIL_EVENTS} - JECXZ @@dblbufcreate - {$ENDIF} - MOV EAX, EBX - CALL ECX -@@dblbufcreate: -@@applyfont: - MOV EAX, EBX - CALL [ApplyFont2Wnd_Proc] - MOV EAX, EBX - CALL [ApplyFont2Wnd_Proc] -@@createchildren: - XCHG EAX, EBX - CALL CreateChildWindows - MOV AL, 1 -@@fin: - MOV ESP, EBP - POP EBP -@@ret_false: - POP EBX -end; - - -function WndProcKeybd( Self_: PControl; var Msg: TMsg; var Rslt: Integer): Boolean; -asm - PUSH EBX - MOV ECX, [EDX].TMsg.message - SUB CX, $100 - CMP ECX, 5 - JA @@fin_false - XCHG EBX, EAX // EBX = @Self - XCHG EAX, ECX // EAX = message - WM_KEYFIRST - {$IFDEF EVENTS_DYNAMIC} - MOV ECX, [EBX].TControl.EV - LEA ECX, [ECX].TEvents.fOnKeyUp - {$ELSE} - LEA ECX, [EBX].TControl.EV.fOnKeyUp - {$ENDIF} - JZ @@event - {$IFDEF PARANOIA} DB $34, 1 {$ELSE} XOR AL, 1 {$ENDIF} - JZ @@event - //LEA ECX, [EBX].TControl.EV.fOnKeyDown - ADD ECX, 8 - {$IFDEF PARANOIA} DB $34, 1 {$ELSE} XOR AL, 1 {$ENDIF} - JZ @@event - {$IFDEF PARANOIA} DB $34, 4 {$ELSE} XOR AL, 4 {$ENDIF} - JZ @@event - //LEA ECX, [EBX].TControl.EV.fOnChar - SUB ECX, 24 - {$IFDEF PARANOIA} DB $34, 6 {$ELSE} XOR AL, 2 xor 4 {$ENDIF} - JZ @@event - {$IFDEF PARANOIA} DB $34, 4 {$ELSE} XOR AL, 6 xor 2 {$ENDIF} - JNZ @@fin_false -@@event: - {$IFDEF NIL_EVENTS} - CMP word ptr [ECX].TMethod.Code+2, 0 - JZ @@fin_false - {$ENDIF} - PUSH EDX - PUSH ECX - LEA ECX, [EDX].TMsg.wParam - PUSH ECX - CALL GetShiftState - POP ECX // @wParam - XCHG EAX, [ESP] // ShiftState; EAX=@event - MOV EDX, EBX // @Self - MOV EBX, [EAX].TMethod.Code - MOV EAX, [EAX].TMethod.Data - CALL EBX - - POP EDX - MOV ECX, [EDX].TMsg.wParam - JECXZ @@fin_true - -@@fin_false: - XOR EAX, EAX - POP EBX - RET - -@@fin_true: - MOV AL, 1 - POP EBX -end; - -function TControl.GetCaption: KOLString; -asm - PUSH EBX - PUSH EDI - XCHG EBX, EAX - MOV EDI, EDX - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG1, (1 shl G1_IgnoreWndCaption) - {$ELSE} - CMP [EBX].fIgnoreWndCaption, 0 - {$ENDIF USE_FLAGS} - JNZ @@getFCaption - MOV ECX, [EBX].fHandle - JECXZ @@getFCaption -@@getWndCaption: - PUSH ECX - CALL GetWindowTextLength - PUSH EAX - XCHG EDX, EAX - LEA EAX, [EBX].fCaption - CALL System.@LStrSetLength - POP ECX - JECXZ @@getFCaption - INC ECX - PUSH ECX - PUSH [EBX].fCaption - PUSH [EBX].fHandle - CALL GetWindowText -@@getFCaption: - MOV EDX, [EBX].fCaption - XCHG EAX, EDI - {$IFNDEF UNICODE_CTRLS} - CALL System.@LStrAsg - {$ELSE} - CALL System.@WStrFromPChar - {$ENDIF} -@@exit: - POP EDI - POP EBX -end; - -function TControl.get_ClassName: AnsiString; -asm - PUSH EBX - XCHG EBX, EAX - XCHG EAX, EDX - MOV EDX, [EBX].fControlClassName - PUSH EAX - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar // EAX^ := String(EDX) - POP EAX - {$IFDEF USE_FLAGS} - TEST [EBX].fFlagsG6, 1 shl G6_CtlClassNameChg - {$ELSE} - CMP [EBX].fCtlClsNameChg, 0 - {$ENDIF} - JNZ @@exit - MOV ECX, [EAX] - MOV EDX, offset[ @@obj ] - CALL System.@LStrCat3 // EAX^ := EDX + ECX - JMP @@exit - - {$IFDEF _D2009orHigher} - DW 1252, 1 // CP_ANSI_LATIN1, Byte // TODO: CP_ACP - {$ENDIF} - DD -1, 4 // FFFFFFFF 04000000 obj_, 0 -@@obj: DB 'obj_', 0 -@@exit: - POP EBX -end; - -function TControl.GetItems(Idx: Integer): AnsiString; -asm - PUSH ESI - PUSH EDI - PUSH EBX - PUSH EBP - MOV EBP, ESP - - MOV EBX, EAX // @Self - MOV ESI, EDX // Idx - MOV EDI, ECX // @Result - - CALL Item2Pos - PUSH 0 // push 0 - PUSH EAX // store Pos - - XCHG EDX, EAX - MOV EAX, EBX - CALL Pos2Item // EAX = Idx' - XCHG ESI, EAX // ESI = Idx' - - XOR EAX, EAX - {$IFDEF COMMANDACTIONS_OBJ} - MOV ECX, [EBX].fCommandActions - MOVZX ECX, [ECX].TCommandActionsObj.aGetItemLength - {$ELSE} - MOVZX ECX, [EBX].fCommandActions.aGetItemLength - {$ENDIF} - JECXZ @@ret_empty - - PUSH ECX // push aGetItemLength - - PUSH EBX - CALL Perform - - TEST EAX, EAX - JZ @@ret_empty - - PUSH EAX // save L - ADD EAX, 4 - - CALL System.@GetMem // GetMem( L+4 ) - POP EDX // restore L - LEA ECX, [EDX+1] - MOV dword ptr [EAX], ECX - {$IFDEF COMMANDACTIONS_OBJ} - MOV ECX, [EBX].fCommandActions - MOVZX ECX, [ECX].TCommandActionsObj.aGetItemText - {$ELSE} - MOVZX ECX, [EBX].fCommandActions.aGetItemText - {$ENDIF} - JECXZ @@ret_buf - - PUSH EDX // save L - - PUSH EAX - PUSH EAX // push Buf - PUSH ESI // push Idx - - PUSH ECX // push aGetItemText - PUSH EBX - CALL Perform - POP EAX - - POP EDX -@@ret_buf: - MOV byte ptr [EAX + EDX], 0 // Buf[ L ] := #0 - -@@ret_empty: // EAX = 0 - XCHG EDX, EAX - MOV EAX, EDI - PUSH EDX - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - POP ECX - JECXZ @@exit - XCHG EAX, ECX - CALL System.@FreeMem -@@exit: - MOV ESP, EBP - POP EBP - POP EBX - POP EDI - POP ESI -end; - -procedure TControl.SetItems(Idx: Integer; const Value: AnsiString); -asm - PUSH EDI - PUSH EBX - XCHG EBX, EAX - XCHG EDI, EDX // EDI = Idx - CALL ECX2PChar - PUSH ECX // @Value[1] - - {$IFDEF COMMANDACTIONS_OBJ} - MOV ECX, [EBX].fCommandActions - MOVZX ECX, [ECX].TCommandActionsObj.aSetItemText - {$ELSE} - MOVZX ECX, [EBX].fCommandActions.aSetItemText - {$ENDIF} - JECXZ @@1 - - PUSH 0 - PUSH ECX - - MOV EDX, EDI - MOV EAX, EBX - CALL Item2Pos - PUSH EAX // store Strt - - MOV EDX, EDI - INC EDX - MOV EAX, EBX - CALL Item2Pos - POP EDX // EDX = Strt - - SUB EAX, EDX - PUSH EAX // store L - - MOV EAX, EBX - CALL SetSelStart - - POP EDX // EDX = L - PUSH EBX // prepare @Self for Perform - XCHG EAX, EBX - CALL SetSelLength - - // @Value[1] already in stack, - // 0 already in stack - // aSetItemText already in stack - // @Self already in stack - - CALL Perform - JMP @@exit - -@@1: // @Value[1] in stack already - POP EDX - {$IFDEF COMMANDACTIONS_OBJ} - MOV ECX, [EBX].fCommandActions - MOVZX ECX, [ECX].TCommandActionsObj.aDeleteItem - {$ELSE} - MOVZX ECX, [EBX].fCommandActions.aDeleteItem - {$ENDIF} - JECXZ @@exit - - {$IFNDEF NOT_FIX_CURINDEX} - PUSH ESI - PUSH EBP - - PUSH EDX - - MOV EAX, EBX // +AK - CALL GetCurIndex // +AK - XCHG ESI, EAX // ESI = TmpCurIdx - - MOV EAX, EBX - MOV EDX, EDI - CALL GetItemData - XCHG EBP, EAX // EBP = TmpData - - MOV EDX, EDI - MOV EAX, EBX - CALL Delete - - MOV EAX, EBX // *AK - MOV EDX, EDI - POP ECX - CALL Insert - - MOV ECX, EBP // ECX = TmpData - MOV EDX, EDI - MOV EAX, EBX - CALL SetItemData - - XCHG EAX, EBX // +AK - MOV EDX, ESI // +AK - CALL SetCurIndex // +AK - - POP EBP - POP ESI - {$ELSE NOT_FIX_CURINDEX} - PUSH EDX - - MOV EDX, EDI - MOV EAX, EBX - CALL Delete - - XCHG EAX, EBX - XCHG EDX, EDI - - POP ECX - CALL Insert - {$ENDIF NOT_FIX_CURINDEX} - -@@exit: - POP EBX - POP EDI -end; - -function TControl.Add(const S: KOLString): Integer; -asm - PUSH EBX - MOV EBX, EAX // EBX = @Self - - {$IFDEF COMMANDACTIONS_OBJ} - MOV ECX, [EBX].fCommandActions - MOVZX ECX, [ECX].TCommandActionsObj.aAddItem - {$ELSE} - MOVZX ECX, [EBX].fCommandActions.aAddItem // ECX = aAddItem - {$ENDIF} - JECXZ @@chk_addtext - - CALL EDX2PChar - PUSH EDX - PUSH 0 - PUSH ECX - PUSH EBX - CALL Perform - PUSH EAX - - MOV EAX, EBX - CALL TControl.GetItemsCount - XCHG EAX, ECX - LOOP @@ret_EAX - - XCHG EAX, EBX - INC ECX - XOR EDX, EDX - CALL TControl.SetItemSelected -@@ret_EAX: - POP EAX - JMP @@exit - -@@chk_addtext: - {$IFDEF COMMANDACTIONS_OBJ} - MOV ECX, [EBX].fCommandActions - MOV ECX, [ECX].TCommandActionsObj.aAddText - {$ELSE} - MOV ECX, [EBX].fCommandActions.aAddText - {$ENDIF} - JECXZ @@add_text_simple - - CALL ECX - JMP @@exit_0 - -@@add_text_simple: - LEA EAX, [EBX].fCaption - CALL System.@LStrCat - MOV EDX, [EBX].fCaption - MOV EAX, EBX - CALL SetCaption - -@@exit_0: - XOR EAX, EAX -@@exit: - POP EBX -end; - -function TControl.Insert(Idx: Integer; const S: AnsiString): Integer; -asm - CALL ECX2PChar - PUSH ECX - {$IFDEF COMMANDACTIONS_OBJ} - MOV ECX, [EAX].fCommandActions - MOVZX ECX, [ECX].TCommandActionsObj.aInsertItem - {$ELSE} - MOVZX ECX, [EAX].fCommandActions.aInsertItem - {$ENDIF} - JECXZ @@exit_1 - - PUSH EDX - PUSH ECX - PUSH EAX - CALL Perform - RET - -@@exit_1:OR EAX, -1 - POP ECX -end; - -procedure TTrayIcon.SetTooltip(const Value: AnsiString); -asm - PUSH EBX - XCHG EBX, EAX - MOV EAX, [EBX].fTooltip - PUSH EDX - CALL System.@LStrCmp - POP EDX - JE @@exit - LEA EAX, [EBX].fTooltip - CALL System.@LStrAsg - CMP [EBX].fActive, 0 - JE @@exit - XOR EDX, EDX - INC EDX // EDX = NIM_MODIFY - XCHG EAX, EBX - CALL SetTrayIcon -@@exit: - POP EBX -end; - -procedure TTrayIcon.SetTrayIcon(const Value: DWORD); -const sz_tid = sizeof( TNotifyIconData ); -asm - CMP [AppletTerminated], 0 - JE @@1 - MOV DL, NIM_DELETE -@@1: - PUSH EBX - PUSH ESI - MOV ESI, EAX - MOV EBX, EDX - - XOR ECX, ECX - PUSH ECX - ADD ESP, -60 - MOV EDX, [ESI].fToolTip - CALL EDX2PChar - MOV EAX, ESP - MOV CL, 63 - CALL StrLCopy - - PUSH [ESI].fIcon - PUSH CM_TRAYICON - XOR EDX, EDX - CMP BL, NIM_DELETE - JE @@2 - MOV DL, NIF_ICON or NIF_MESSAGE or NIF_TIP -@@2: PUSH EDX - PUSH ESI - MOV EAX, [ESI].FWnd - TEST EAX, EAX - JNZ @@3 - MOV EAX, [ESI].fControl - MOV EAX, [EAX].TControl.fHandle -@@3: - PUSH EAX - PUSH sz_tid - - PUSH ESP - PUSH EBX - CALL Shell_NotifyIcon - - ADD ESP, sz_tid - POP ESI - POP EBX -@@exit: -end; - -function WndProcJustOneNotify( Control: PControl; var Msg: TMsg; var Rslt: Integer ) : Boolean; -asm - PUSH EBP - MOV EBP, ESP - PUSHAD - CALL WndProcJustOne - POPAD - XOR EAX, EAX - PUSH ECX - MOV ECX, [EDX].TMsg.message - SUB ECX, [JustOneMsg] - POP ECX - JNE @@exit - MOV [ECX], EAX - CMP [OnAnotherInstance].TMethod.Code, EAX - JE @@exit_1 - - //MOV EAX, (MAX_PATH + 3) and 0FFFFCh - MOV AH, 2 - SUB ESP, EAX - - MOV ECX, ESP - PUSH EAX - PUSH ECX - PUSH [EDX].TMsg.lParam - CALL GetWindowText - - MOV EDX, ESP - PUSH 0 - MOV EAX, ESP - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - - MOV EDX, [ESP] - MOV EAX, [OnAnotherInstance].TMethod.Data - CALL [OnAnotherInstance].TMethod.Code - - MOV EAX, ESP - CALL System.@LStrClr -@@exit_1: - MOV AL, 1 -@@exit: - MOV ESP, EBP - POP EBP -end; - -function JustOneNotify( Wnd: PControl; const Identifier : AnsiString; - const aOnAnotherInstance: TOnAnotherInstance ) : Boolean; -asm - PUSHAD - MOV EBP, ESP - - XCHG EAX, EDX - PUSH EAX - CALL System.@LStrLen - POP EDX - ADD EAX, EAX - SUB ESP, EAX - MOV EAX, ESP - CALL StrPCopy - PUSH '.ega' - PUSH 'sseM' - PUSH ESP - CALL RegisterWindowMessage - MOV [JustOneMsg], EAX - TEST EAX, EAX - MOV ESP, EBP - POPAD - JE @@exit_f - PUSHAD - CALL JustOne - DEC AL - POPAD - JZ @@exit_t - PUSH EBX - XCHG EBX, EAX - XOR EDX, EDX - XCHG [EBX].TControl.fCaption, EDX - PUSH EDX - CALL GetCommandLine - XCHG EDX, EAX - LEA EAX, [EBX].TControl.fCaption - {$IFDEF _D2009orHigher} - PUSH ECX - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - {$IFDEF _D2009orHigher} - POP ECX - {$ENDIF} - MOV EAX, EBX - MOV EDX, [EBX].TControl.fCaption - CALL TControl.SetCaption - MOV EAX, EBX - CALL TControl.GetWindowHandle - TEST EAX, EAX - JZ @@rest_cap - PUSH BSM_APPLICATIONS - MOV EDX, ESP - PUSH EAX - PUSH 0 - PUSH [JustOneMsg] - PUSH EDX - PUSH BSF_QUERY or BSF_IGNORECURRENTTASK - CALL BroadcastSystemMessage - POP EDX -@@rest_cap: - LEA EAX, [EBX].TControl.fCaption - CALL System.@LStrClr - POP EDX - MOV [EBX].TControl.fCaption, EDX - MOV EAX, EBX - CALL TControl.SetCaption - POP EBX -@@exit_f: - XOR EAX, EAX - JMP @@exit -@@exit_t: - PUSHAD - LEA ESI, [aOnAnotherInstance] - LEA EDI, [OnAnotherInstance] - MOVSD - MOVSD - MOV EDX, offset[WndProcJustOneNotify] - CALL TControl.AttachProc - POPAD - MOV AL, 1 -@@exit: -end; - -function TStrList.AppendToFile(const FileName: Ansistring): Boolean; -asm - PUSH EBX - MOV EBX, EDX - PUSH 0 - MOV EDX, ESP - CALL GetTextStr - XCHG EAX, EBX - MOV EDX, ofOpenWrite or ofOpenAlways - CALL FileCreate - MOV EBX, EAX - INC EAX - JZ @@exit - DEC EAX - XOR EDX, EDX - XOR ECX, ECX - MOV CL, spEnd - CALL FileSeek - POP EAX - PUSH EAX - CALL System.@LStrLen - XCHG ECX, EAX - MOV EAX, EBX - POP EDX - PUSH EDX - CALL FileWrite - XCHG EAX, EBX - CALL FileClose -@@exit: - CALL RemoveStr - POP EBX -end; - -function TStrList.LoadFromFile(const FileName: AnsiString): Boolean; -asm - PUSH EAX - XCHG EAX, EDX - MOV EDX, ofOpenRead or ofShareDenyWrite or ofOpenExisting - CALL FileCreate - INC EAX - JZ @@exit - DEC EAX - PUSH EBX - XCHG EBX, EAX - PUSH 0 - PUSH EBX - CALL GetFileSize - XOR EDX, EDX - PUSH EDX - XCHG ECX, EAX - MOV EAX, ESP - PUSH ECX - {$IFDEF _D2} - CALL _LStrFromPCharLen - {$ELSE} - {$IFDEF _D2009orHigher} - PUSH EDX // ushort 0, CodePage? - {$ENDIF} - CALL System.@LStrFromPCharLen - {$ENDIF} - POP ECX - MOV EAX, EBX - POP EDX - PUSH EDX - CALL FileRead - XCHG EAX, EBX - CALL FileClose - POP EDX - POP EBX - POP EAX - PUSH EDX - XOR ECX, ECX - CALL SetText - CALL RemoveStr - PUSH EDX - MOV AL, 1 -@@exit: POP EDX -end; - -function TStrList.SaveToFile(const FileName: Ansistring): Boolean; -asm - PUSH EBX - PUSH EAX - XCHG EAX, EDX - MOV EDX, ofOpenWrite or ofCreateAlways - CALL FileCreate - INC EAX - JZ @@exit - DEC EAX - XCHG EBX, EAX - POP EAX - PUSH 0 - MOV EDX, ESP - CALL GetTextStr - POP EAX - PUSH EAX - CALL System.@LStrLen - XCHG ECX, EAX - POP EDX - PUSH EDX - MOV EAX, EBX - CALL FileWrite - PUSH EBX - CALL SetEndOfFile - XCHG EAX, EBX - CALL FileClose - CALL RemoveStr - PUSH EDX - INC EAX -@@exit: - POP EDX - POP EBX -end; - -procedure TControl.SetStatusText(Index: Integer; const Value: KOLString); -asm - PUSHAD - MOV EBX, EDX // EBX = Index - MOV ESI, EAX // ESI = @Self - PUSH Value // prepare value for call at the end of procedure - PUSH EBX // prepare Index for call at the end of procedure - MOV ECX, [ESI].fStatusCtl - MOV EBP, ECX - INC ECX - LOOP @@status_created - CALL GetClientHeight - PUSH EAX // ch = old client height - MOV EAX, ESI - CALL _NewStatusBar - MOV [ESI].fStatusCtl, EAX - XCHG EBP, EAX - XOR EDX, EDX - PUSH EDX - INC DH - DEC EDX - CMP EBX, EDX - SETZ DL - NEG EDX - PUSH EDX - PUSH SB_SIMPLE - PUSH EBP - CALL TControl.Perform - ADD ESP, -16 - PUSH ESP - PUSH [EBP].fHandle - CALL GetWindowRect - POP EAX - POP EDX - POP EAX - POP EAX - SUB EAX, EDX - MOV [ESI].fClientBottom, AL - POP EDX // ch - PUSH 0 - PUSH 0 - PUSH WM_SIZE - PUSH EBP - MOV EAX, ESI - CALL TControl.SetClientHeight - CALL TControl.Perform -@@status_created: - CMP EBX, 255 - JGE @@not_simple - PUSH 0 - PUSH 0 - PUSH SB_GETPARTS - PUSH EBP - CALL Perform - CMP EAX, EBX - JG @@reset_simple - MOV EAX, ESI - CALL GetWidth - CDQ - MOV ECX, EBX - INC ECX - IDIV ECX - MOV EDX, EAX - ADD ESP, -1024 - /////////////////// - MOV ECX, EBX - MOV EDI, ESP - JECXZ @@2 -@@store_loo: - STOSD - ADD EAX, EDX - LOOP @@store_loo -@@2: - OR dword ptr [ESP+EBX*4], -1 - PUSH ESP - INC EBX - PUSH EBX - PUSH SB_SETPARTS - PUSH EBP - CALL Perform - //////////////////// - ADD ESP, 1024 -@@reset_simple: - PUSH 0 - PUSH 0 - PUSH SB_SIMPLE - PUSH EBP - CALL Perform -@@not_simple: - PUSH SB_SETTEXT - PUSH EBP - CALL Perform - POPAD -end; - -function TOpenSaveDialog.Execute: Boolean; -asm - PUSH EBX - XCHG EBX, EAX - - XOR ECX, ECX - {$IFDEF OpenSaveDialog_Extended} - MOVZX EAX, [EBX].NoPlaceBar - PUSH EAX - PUSH ECX - PUSH ECX - PUSH [EBX].TemplateName - PUSH [EBX].HookProc - {$ELSE} - PUSH ECX // prepare lpTemplateName = nil - PUSH ECX // prepare lpfnHook = nil - {$ENDIF} - PUSH EBX // prepare lCustData = @Self - MOV EDX, [EBX].FDefExtension - CALL EDX2PChar - PUSH EDX // prepare lpstrDefExt = FDefExtension - PUSH ECX // prepare nFileExtension, nFileOffset: Word = 0, 0 - // prepare flags: - LEA EAX, [EBX].FOptions - MOV EDX, Offset[@@OpenSaveFlags] - {$IFDEF OpenSaveDialog_Extended} - MOV CL, 14 - {$ELSE} - MOV CL, 12 - {$ENDIF} - CALL MakeFlags - XOR ECX, ECX - OR EAX, OFN_EXPLORER or OFN_LONGNAMES or OFN_ENABLESIZING - PUSH EAX // push Flags - PUSH [EBX].FTitle // prepare lpstrTitle - PUSH [EBX].FInitialDir // prepare lpstrInitialDir - PUSH ECX // prepare nMaxFileTitle = 0 - PUSH ECX // prepare lpstrFileTitle = nil - TEST AH, 2 // MultiSelect? - MOV EAX, 65520 - JNZ @@1 - MOV AX, MAX_PATH+2 -@@1: PUSH EAX // prepare nMaxFile - CALL System.@GetMem - POP ECX - PUSH ECX - PUSH EAX // prepare lpStrFile - XOR EDX, EDX - -@@2: MOV EDX, [EBX].fFileName // no, fill it initilly by FileName - CALL EDX2PChar - DEC ECX // added 5 october 2003 to prevent possible error if FileName too big - CALL StrLCopy - XOR EDX, EDX - - PUSH [EBX].FFilterIndex // prepare nFilterIndex - PUSH EDX // prepare nMaxCustFilter - PUSH EDX // prepare lpstrCustomFilter - PUSH EDX // prepare lpstrFilter = nil - MOV EAX, ESP - OR EDX, [EBX].FFilter - JZ @@5 - - MOV ECX, offset[@@0] - CALL System.@LStrCat3 // prepare lpStrFilter = FFilter + #0 - POP EAX - PUSH EAX - XOR EDX, EDX -@@3: INC EAX // filter is not starting from ';' or '|'... - CMP [EAX], DL - JZ @@5 - CMP byte ptr [EAX], '|' - JNZ @@3 -@@4: MOV [EAX], DL - JMP @@3 -@@OpenSaveFlags: - DD OFN_CREATEPROMPT, OFN_EXTENSIONDIFFERENT, OFN_FILEMUSTEXIST - DD OFN_HIDEREADONLY, OFN_NOCHANGEDIR, OFN_NODEREFERENCELINKS - DD OFN_ALLOWMULTISELECT, OFN_NONETWORKBUTTON, OFN_NOREADONLYRETURN - DD OFN_OVERWRITEPROMPT, OFN_PATHMUSTEXIST, OFN_READONLY, OFN_NOVALIDATE - {$IFDEF OpenSaveDialog_Extended} - DD OFN_ENABLETEMPLATE, OFN_ENABLEHOOK - {$ENDIF} - - {$IFDEF _D2009orHigher} - DW 0, 1 - {$ENDIF} - DD -1, 1 -@@0: DB 0 - - -@@5: - PUSH [hInstance] // prepare hInstance - - MOV ECX, [EBX].TControl.fWnd - INC ECX - LOOP @@6 - MOV ECX, [Applet] - JECXZ @@6 - MOV ECX, [ECX].TControl.fHandle -@@6: PUSH ECX // prepare hWndOwner - {$IFDEF OpenSaveDialog_Extended} - CALL WinVer - CMP AL, wvNT - MOV DL, 76+12 - JA @@6a - CMP AL, wvME - JE @@6a - MOV DL, 76 -@@6a: MOVZX EAX, DL - PUSH EAX - {$ELSE} - PUSH 76 // prepare lStructSize - {$ENDIF} - - PUSH ESP - CMP [EBX].TControl.FOpenDialog, 0 - JZ @@7 - CALL GetOpenFileName - JMP @@8 -@@7: CALL GetSaveFileName -@@8: - PUSH EAX - XOR EDX, EDX - TEST EAX, EAX - JZ @@10 - - MOV EAX, [ESP+4].TOpenFileName.nFilterIndex - MOV [EBX].FFilterIndex, EAX - - TEST BYTE PTR [ESP+4].TOpenFileName.Flags, OFN_READONLY - SETNZ AL - MOV [EBX].fOpenReadOnly, AL - - MOV EAX, [ESP+4].TOpenFileName.lpstrFile - MOV EDX, EAX - XOR ECX, ECX - - TEST [EBX].FOptions, 1 shl OSAllowMultiSelect - JZ @@10 - - DEC EAX -@@9: INC EAX - CMP byte ptr [EAX], CL - JNZ @@9 - CMP byte ptr [EAX+1], CL - JZ @@10 - MOV byte ptr [EAX], 13 - JMP @@9 - -@@10: - LEA EAX, [EBX].FFileName - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - MOV EAX, [ESP+4].TOpenFileName.lpstrFile - CALL System.@FreeMem // v1.86 +AK - - LEA EAX, [ESP+4].TOpenFileName.lpstrFilter - CALL System.@LStrClr - - POP EAX - {$IFDEF OpenSaveDialog_Extended} - ADD ESP, 76+12 - {$ELSE} - ADD ESP, 76 - {$ENDIF} - POP EBX -end; - -function TOpenDirDialog.Execute: Boolean; -asm - PUSH EBX - XCHG EBX, EAX - XOR ECX, ECX - PUSH ECX // prepare iImage = 0 - PUSH EBX // prepare lParam = @Self - PUSH [EBX].FCallBack // prepare lpfn = FCallBack - LEA EAX, [EBX].FOptions - MOV EDX, Offset[@@FlagsArray] - MOV CL, 8 - CALL MakeFlags - PUSH EAX // prepare ulFlags = Options - PUSH [EBX].FTitle // prepare lpszTitle - LEA EAX, [EBX].FBuf - PUSH EAX // prepare pszDisplayName - PUSH 0 // prepare pidlRoot - MOV ECX, [EBX].fWnd - INC ECX - LOOP @@1 - MOV ECX, Applet - JECXZ @@1 - MOV ECX, [ECX].TControl.fHandle -@@1: PUSH ECX // prepare hwndOwner - PUSH ESP - CALL SHBrowseForFolderA - ADD ESP, 32 - TEST EAX, EAX - JZ @@exit - PUSH EAX - LEA EDX, [EBX].FBuf - PUSH EDX - PUSH EAX - CALL SHGetPathFromIDListA - CALL CoTaskMemFree - MOV AL, 1 - JMP @@fin -@@FlagsArray: - DD BIF_BROWSEFORCOMPUTER, BIF_BROWSEFORPRINTER, BIF_DONTGOBELOWDOMAIN - DD BIF_RETURNFSANCESTORS, BIF_RETURNONLYFSDIRS, BIF_STATUSTEXT - DD BIF_BROWSEINCLUDEFILES, BIF_EDITBOX, BIF_NEWDIALOGSTYLE -@@exit: XOR EAX, EAX -@@fin: - POP EBX -end; - -function OpenDirSelChangeCallBack( Wnd: HWnd; Msg: DWORD; lParam, lpData: LParam ): - Integer; stdcall; -asm - MOV EAX, [lpData] - MOV ECX, [EAX].TOpenDirDialog.FOnSelChanged.TMethod.Code - JECXZ @@exit - LEA EDX, [EAX].TOpenDirDialog.FBuf - PUSH EDX - PUSH [lParam] - CALL SHGetPathFromIDListA - MOV EDX, [lpData] - LEA ECX, [EDX].TOpenDirDialog.FBuf - PUSH 0 - PUSH ESP - LEA EAX, [EDX].TOpenDirDialog.FStatusText - PUSH EAX - MOV EAX, [EDX].TOpenDirDialog.FOnSelChanged.TMethod.Data - CALL dword ptr [EDX].TOpenDirDialog.FOnSelChanged.TMethod.Code - PUSH 0 - PUSH BFFM_ENABLEOK - PUSH [Wnd] - CALL SendMessage -@@1: MOV EDX, [lpData] - MOV ECX, [EDX].TOpenDirDialog.FStatusText - JECXZ @@exit - PUSH ECX - PUSH 0 - PUSH BFFM_SETSTATUSTEXT - PUSH [Wnd] - CALL SendMessage -@@exit: XOR EAX, EAX -end; - -function TControl.TBAddInsButtons(Idx: Integer; const Buttons: array of PKOLChar; - const BtnImgIdxArray: array of Integer): Integer; stdcall; -asm { [EBP+$8] = @Self - [EBP+$C] = Idx - [EBP+$10] = Buttons - [EBP+$14] = High(Butons) - [EBP+$18] = BtnImgIdxArray - [EBP+$1C] = High(BtnImgIdxArray) } - PUSH EBX - PUSH ESI - PUSH EDI - OR EBX, -1 - MOV EAX, 20 - MOV ECX, [EBP+$14] - CMP ECX, EBX - JLE @@fin - INC ECX - MUL ECX - CALL System.@GetMem - PUSH EAX // save AB to FreeMem after - MOV EDX, EBX - DEC EDX // nBmp := -2 - MOV ECX, [EBP+$14] - INC ECX - JZ @@exit - MOV ECX, [EBP+$1C] - INC ECX - JZ @@1 - MOV ECX, [BtnImgIdxArray] - MOV EDX, [ECX] - DEC EDX // nBmp := BtnImgIdxArray[ 0 ] - 1 -@@1: MOV ECX, [EBP+$14] - INC ECX - MOV ESI, [Buttons] - MOV EDI, EAX // EDI = PAB - PUSH 0 // N:=0 in [EBP-$14] -@@loop: - LODSD - TEST EAX, EAX - JZ @@break - PUSH ECX - CMP word ptr [EAX], '-' - JNE @@2 - OR EAX, -1 - STOSD - MOV EAX, [ToolbarsIDcmd] - TEST EBX, EBX - {$IFDEF USE_CMOV} - CMOVL EBX, EAX - {$ELSE} - JGE @@b0 - MOV EBX, EAX -@@b0: {$ENDIF} - STOSD - XOR EAX, EAX - INC AH // TBSTYLE_SEP = 1 - STOSD - DEC AH - STOSD - DEC EAX - JMP @@3 - {$IFDEF _D2009orHigher} - DW 0, 1 - {$ENDIF} - DD -1, 1 -@@0: DB 0 -@@2: - INC EDX // Inc( nBmp ) - PUSH EAX - MOV EAX, [EBP+$1C] - MOV ECX, [EBP-$14] - CMP EAX, ECX - MOV EAX, EDX - JL @@21 - MOV EAX, [BtnImgIdxArray] - MOV EAX, [EAX+ECX*4] -@@21: STOSD - TEST EDX, EDX - JGE @@2a - DEC EDX -@@2a: - MOV EAX, [ToolbarsIDcmd] - STOSD - TEST EBX, EBX - {$IFDEF USE_CMOV} - CMOVL EBX, EAX - {$ELSE} - JGE @@210 - MOV EBX, EAX -@@210: {$ENDIF} - MOV ECX, [EBP+8] - MOV AH, BYTE PTR [ECX].TControl.DF.fDefaultTBBtnStyle - POP ECX - MOV AL, 4 // AL=fsState=_ENABLED, AH=fsStyle=_AUTOSIZE if fDefaultTBBtnStyle contains - CMP byte ptr [ECX], '^' - JNE @@22 - OR AH, TBSTYLE_DROPDOWN - INC ECX -@@22: CMP byte ptr [ECX], '-' - JZ @@23 - CMP byte ptr [ECX], '+' - JNZ @@24 - MOV AL, TBSTATE_ENABLED or TBSTATE_CHECKED -@@23: INC ECX - OR AH, TBSTYLE_CHECK - CMP byte ptr [ECX], '!' - JNZ @@24 - OR AH, TBSTYLE_GROUP - INC ECX -@@24: {$IFDEF TOOLBAR_DOT_NOAUTOSIZE_BUTTON} - CMP byte ptr [ECX], '.' - JNZ @@25 - AND AH, not TBSTYLE_AUTOSIZE - INC ECX -@@25: - {$ENDIF TOOLBAR_DOT_NOAUTOSIZE_BUTTON} - STOSD - MOV EAX, [EBP+8] - STOSD - OR EAX, -1 - CMP word ptr [ECX], ' ' - JZ @@3 - CMP byte ptr [ECX], 0 - JZ @@3 - PUSH EDX - PUSH 0 - MOV EDX, ECX - MOV EAX, ESP - {$IFDEF _D2009orHigher} - PUSH ECX - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - {$IFDEF _D2009orHigher} - POP ECX - {$ENDIF} - MOV EAX, ESP - MOV EDX, offset[@@0] - CALL System.@LStrCat - PUSH dword ptr [ESP] - PUSH 0 - PUSH TB_ADDSTRING - PUSH dword ptr [EBP+8] - CALL Perform - STOSD - CALL RemoveStr - POP EDX - JMP @@30 -@@3: STOSD -@@30: INC dword ptr [EBP-$14] - INC [ToolbarsIDcmd] - POP ECX - DEC ECX - JNZ @@loop -@@break: - POP ECX - JECXZ @@exit - PUSH dword ptr [ESP] - MOV EAX, [Idx] - TEST EAX, EAX - JGE @@31 - PUSH ECX - PUSH TB_ADDBUTTONS - JMP @@32 -@@31: - PUSH EAX - PUSH TB_INSERTBUTTON -@@32: - PUSH dword ptr [EBP+8] - CALL Perform -@@exit: - POP EAX - CALL System.@FreeMem -@@fin: - POP EDI - POP ESI - XCHG EAX, EBX - POP EBX -end; - -function TControl.TBGetButtonText( BtnID: Integer ): AnsiString; -asm - PUSH ECX - ADD ESP, -1024 - PUSH ESP - PUSH EAX - CALL GetTBBtnGoodID - POP EDX - PUSH EAX - PUSH TB_GETBUTTONTEXT - PUSH EDX - CALL Perform - TEST EAX, EAX - JLE @@2 - MOV EDX, ESP - JMP @@1 -@@2: XOR EDX, EDX -@@1: MOV EAX, [ESP+1024] - {$IFDEF _D2009orHigher} - XOR ECX, ECX - {$ENDIF} - CALL System.@LStrFromPChar - ADD ESP, 1028 -end; - -procedure TBitmap.LoadFromResourceName(Inst: DWORD; ResName: PAnsiChar); -asm - PUSH EBX - MOV EBX, EAX - PUSHAD - CALL Clear - POPAD - XOR EAX, EAX - PUSH ECX - MOVZX ECX, [EBX].fHandleType - INC ECX - LOOP @@1 - MOV AH, LR_CREATEDIBSECTION shr 8 // = $2000 -@@1: MOV AL, LR_DEFAULTSIZE // = $40 - POP ECX - PUSH EAX - PUSH 0 - PUSH 0 - PUSH IMAGE_BITMAP - PUSH ECX - PUSH EDX - CALL LoadImage - TEST EAX, EAX - JZ @@exit - XCHG EDX, EAX - XCHG EAX, EBX - CALL SetHandle -@@exit: POP EBX -end; -{$ENDIF} -- cgit v1.2.3