-
> Vladimir Kladov © (24.02.15 13:08) [31]
да-да по крайней мере паскальный вариант, самый большой проект, где был Tlist в логе - это и было изза апплета, сейчас все чисто
остался только косяк с фреймами (или табами) в другом
> Запускаем программу (F8), в Watches добавляем PDWORD($7EF43120), > ставим "Break when changed", и каждый раз, когда первые > 4 байта меняются, будет останов. Тут можно посмотреть, кто > выделил.
чет в 7ке нет такого "Break when changed" и пролетает мимо ненаходит
-
PDWORD(адрес)^ - разыменовать надо.
-
PDWORD(адрес)^ - разыменовать надо.
-
Обновил KOL.zip на kolmck.net.
-
Обновил KOL.zip на kolmck.net.
-
табконтрол вроде не причём, на панелях также фастмм указывает на создание фрейма в файлах типа Unit2_1.inc
procedure NewForm2( var Result: PForm2; AParent: PControl ); begin
{$IFDEF KOLCLASSES} Result := PForm2.Create; {$ELSE OBJECTS} New( Result, Create );<<<<<<<<<<<<<<<<<<<<<<<<<< {$ENDIF KOL CLASSES/OBJECTS} Result.Form := NewPanel( AParent, esNone ).MarkPanelAsForm; Result.Form.DF.FormAddress := @ Result.Form; Result.Form.DF.FormObj := Result; Result.Form.SetClientSize( 468, 278 ); Result.EditBox1 := NewEditBox( Result.Form, [ ] ).SetPosition( 168, 104 ); Result.EditBox1.Text := 'EditBox1'; Result.EditBox1.Color := TColor(clWindow); Result.Form.CreateWindow;
end; показано <<<<<<<<<<<<< хоть free, хоть close - одинаково
-
табконтрол вроде не причём, на панелях также фастмм указывает на создание фрейма в файлах типа Unit2_1.inc
procedure NewForm2( var Result: PForm2; AParent: PControl ); begin
{$IFDEF KOLCLASSES} Result := PForm2.Create; {$ELSE OBJECTS} New( Result, Create );<<<<<<<<<<<<<<<<<<<<<<<<<< {$ENDIF KOL CLASSES/OBJECTS} Result.Form := NewPanel( AParent, esNone ).MarkPanelAsForm; Result.Form.DF.FormAddress := @ Result.Form; Result.Form.DF.FormObj := Result; Result.Form.SetClientSize( 468, 278 ); Result.EditBox1 := NewEditBox( Result.Form, [ ] ).SetPosition( 168, 104 ); Result.EditBox1.Text := 'EditBox1'; Result.EditBox1.Color := TColor(clWindow); Result.Form.CreateWindow;
end; показано <<<<<<<<<<<<< хоть free, хоть close - одинаково
-
KOL_asm.inc: procedure Run( var AppletCtl: PControl );
asm
TEST EAX, EAX
JZ @@exit
PUSH EBX
XCHG EBX, EAX
INC [AppletRunning]
MOV EAX, [EBX]
MOV [Applet], EAX
CALL CallTControlCreateWindow
@@loop: CMP [AppletTerminated], 0
JNZ @@end_loop
CALL WaitMessage
MOV EAX, [EBX]
CALL TControl.ProcessMessages
MOV EAX, [EBX]
CALL [ProcessIdle]
JMP @@loop
@@end_loop:
MOV ECX, [EBX]
XCHG EAX, EBX
POP EBX
JECXZ @@exit
POP EBX
LEA EAX, [Applet]
CMP [EAX], 0 <-ОШИБКА!!!!
JZ @@exit
CALL TerminateExecution
@@exit:
end;
-
KOL_asm.inc: procedure Run( var AppletCtl: PControl );
asm
TEST EAX, EAX
JZ @@exit
PUSH EBX
XCHG EBX, EAX
INC [AppletRunning]
MOV EAX, [EBX]
MOV [Applet], EAX
CALL CallTControlCreateWindow
@@loop: CMP [AppletTerminated], 0
JNZ @@end_loop
CALL WaitMessage
MOV EAX, [EBX]
CALL TControl.ProcessMessages
MOV EAX, [EBX]
CALL [ProcessIdle]
JMP @@loop
@@end_loop:
MOV ECX, [EBX]
XCHG EAX, EBX
POP EBX
JECXZ @@exit
POP EBX
LEA EAX, [Applet]
CMP [EAX], 0 <-ОШИБКА!!!!
JZ @@exit
CALL TerminateExecution
@@exit:
end;
-
В destructor TMenu.Destroy не используется (но определяется) Next.
-
В destructor TMenu.Destroy не используется (но определяется) Next.
-
> CMP [EAX], 0 <-ОШИБКА!!!!
Какая? В Delphi7 ошибки нет. У вас что, Free Pascal? Delphi 201x? Пишите яснее. > В destructor TMenu.Destroy не используется (но определяется) > Next.
destructor TMenu.Destroy;
var Next, Prnt: PMenu;
Save_Ref: Integer;
begin
LogFileOutput( GetStartDir + 'TMenu.Destroy.txt',
Int2Hex( DWORD( @ Self ), 6 ) + ' ' + Int2Str( RefCount ) );
if Count > 0 then
begin
FMenuItems.ReleaseObjects;
FMenuItems := NewList;
end;
if FParentMenu <> nil then
begin
Save_Ref := Self.fRefCount; Self.fRefCount := 17;
Prnt := FParentMenu;
Next := Prnt.RemoveSubMenu( FId );
FParentMenu := nil;
Prnt.FMenuItems.Remove( @ Self );
Self.fRefCount := Save_Ref;
if Next = nil then Exit;
end;
if (FControl <> nil) and (FControl.fMenu = FHandle) and (FHandle <> 0) then
begin
if not (G2_Destroying in FControl.fFlagsG2)
not FControl.fDestroying then begin
Windows.SetMenu( FControl.fHandle, 0 );
end;
FControl.fMenu := 0;
Next := PMenu( FControl.fMenuObj );
while Next <> nil do
begin
if Next.fNextMenu = @Self then
begin
Next.fNextMenu := fNextMenu;
break;
end;
Next := Next.fNextMenu;
end;
end;
Next := fNextMenu;
if FBitmap <> 0 then
Bitmap := 0;
if FHandle <> 0 then
begin
DestroyMenu( FHandle )
;
end;
FCaption := '';
FMenuItems.Free;
Next.Free;
inherited;
end; Расскажите уже, каким компилятором пользуетесь, что он такую чушь сказал.
-
> CMP [EAX], 0 <-ОШИБКА!!!!
Какая? В Delphi7 ошибки нет. У вас что, Free Pascal? Delphi 201x? Пишите яснее. > В destructor TMenu.Destroy не используется (но определяется) > Next.
destructor TMenu.Destroy;
var Next, Prnt: PMenu;
Save_Ref: Integer;
begin
LogFileOutput( GetStartDir + 'TMenu.Destroy.txt',
Int2Hex( DWORD( @ Self ), 6 ) + ' ' + Int2Str( RefCount ) );
if Count > 0 then
begin
FMenuItems.ReleaseObjects;
FMenuItems := NewList;
end;
if FParentMenu <> nil then
begin
Save_Ref := Self.fRefCount; Self.fRefCount := 17;
Prnt := FParentMenu;
Next := Prnt.RemoveSubMenu( FId );
FParentMenu := nil;
Prnt.FMenuItems.Remove( @ Self );
Self.fRefCount := Save_Ref;
if Next = nil then Exit;
end;
if (FControl <> nil) and (FControl.fMenu = FHandle) and (FHandle <> 0) then
begin
if not (G2_Destroying in FControl.fFlagsG2)
not FControl.fDestroying then begin
Windows.SetMenu( FControl.fHandle, 0 );
end;
FControl.fMenu := 0;
Next := PMenu( FControl.fMenuObj );
while Next <> nil do
begin
if Next.fNextMenu = @Self then
begin
Next.fNextMenu := fNextMenu;
break;
end;
Next := Next.fNextMenu;
end;
end;
Next := fNextMenu;
if FBitmap <> 0 then
Bitmap := 0;
if FHandle <> 0 then
begin
DestroyMenu( FHandle )
;
end;
FCaption := '';
FMenuItems.Free;
Next.Free;
inherited;
end; Расскажите уже, каким компилятором пользуетесь, что он такую чушь сказал.
-
Во вчерашнем обновлении не довставил новый TerminateExecution в KOL_ASM.INC. Поправить смогу только вечером. Берите код, что я здесь привел вчера, и вставьте сами (отличается комментариями с паскаль-кодом). Либо включите PAS_VERSION.
-
Во вчерашнем обновлении не довставил новый TerminateExecution в KOL_ASM.INC. Поправить смогу только вечером. Берите код, что я здесь привел вчера, и вставьте сами (отличается комментариями с паскаль-кодом). Либо включите PAS_VERSION.
-
Я в курсе. Начиная с Windows 8.1, GetVersion/GetVersionEx объявлена устаревшей. Для того, чтобы приложение правильно определяло версию, к нему нужен специально оформленный манифест.
-
Короткий вариант, определяет до 10 версии (9х поддержки нет):
function WinVerShort: TWindowsVersion;
begin
case LoWord(GetVersion) of
$0005: Result := wvY2K;
$0105: Result := wvXP;
$0205: Result := wvServer2003;
$0006: Result := wvVista;
$0106: Result := wvSeven;
$0206: Result := wvEight;
$0306: Result := wvEight_1;
$000A: Result := wvTen;
else
Result := wvNT;
end;
end;
Нужен подобный манифест:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity
type="win32"
name="DelphiApplication"
version="1.0.0.0"
processorArchitecture="*"
/>
<description> my foo exe </description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"
/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- Windows 10 -->
<supportedOS Id=""/>
<!-- Windows 8.1 -->
<supportedOS Id=""/>
<!-- Windows Vista -->
<supportedOS Id=""/>
<!-- Windows 7 -->
<supportedOS Id=""/>
<!-- Windows 8 -->
<supportedOS Id=""/>
</application>
</compatibility>
</assembly>
-
актуальный манифест нынче очень полезен.
функция _WStrLComp в паскалевском исполнении за гранью добра и зла из за неё не работают Name Value в WStrList, например
-
p.s. Ну не то что бы за гранью, но может запилить SVN комюнити? Образовалось ещё одно применение для KOL: firemonkey программы для Windows. Всякие Tray Icon, tree и прочее
-
При создании приложения в KOLProject меняем шрифт - в проекте в файле .inc меняются параметры любые, кроме имени шрифта. В итоге шрифт ВСЕГДА System независимо от заданного. Эта шляпа тянется уже давно - то работает, то после очередного обновления КОЛ опять не работает.
|