-
dcc32.exe -b KOL.pas -dUNICODE_CTRLS
Borland Delphi Version 15.0
Copyright (c) 1983,2002 Borland Software Corporation
KOLDEF.INC(253)
KOLDEF.INC(253)
delphidef.inc(48)
delphicommctrl.inc(1569)
KOL_unicode.inc(1185)
KOL_unicode.inc(1185)
KOL.pas(20549) Error: Incompatible types
KOL_ASM.inc(14864)
KOL.pas(65524)
-
3.00.R+ or change line 20549 to if Copy( Result, 1, 2 ) = KOLString('-') + ThsSeparator then
-
When pressing ALT+SPACE together the system menu does not appear when using PAS_VERSION with a button on the form:
program Test;
uses KOL;
begin
Applet := NewForm(nil, '');
NewButton(Applet,'');
Run(Applet);
end.
- Conditional defines: PAS_VERSION;KEY_PREVIEW; - build and run program - hold down ALT+SPACE together - menu does not show - Conditional defines: ASM_VERSION;KEY_PREVIEW; - build run program - hold down ALT+SPACE together - menu shows correctly
-
At least what I found: KEY_PREVIEW is not important, problem function is _NewControl only (but did not yet find why).
-
Understand now. Pascal version is correct, asm version a bit lagged: it does not set created button as a current control. If the button is current it intercepts ALT+Space as it should.
KEY_PREVIEW does not (and should not) affect ALT+SPACE shortcut.
-
Version 3.00.T+ on site.
-
> KEY_PREVIEW does not (and should not) affect ALT+SPACE shortcut.
Test with the following conditionals:
dcc32.exe -b test.dpr -dPAS_VERSION; dcc32.exe -b test.dpr -dASM_VERSION; dcc32.exe -b test.dpr -dPAS_VERSION;KEY_PREVIEW;
ALT+SPACE not working
dcc32.exe -b test.dpr -dASM_VERSION;KEY_PREVIEW;
ALT+SPACE always working
-
When compiling v3.00.T+ in the IDE, I get this message:
[Fatal Error] KOL.pas(18249): Unterminated conditional directive
-
> L`Autour (22.10.10 11:24) [175] > > SPeller > PWideChar - просто указатель на строку с 0 на конце > WideString - указатель на строку + перед самой строкой хранится > ее длина. > > А как строка UnicodeString представлена в памяти? (Кроме > отзывов про него найти пока ничего не могу). UnicodeString - по организации идентична AnsiString. Исключение в том, что каждый символ в этой строке - двухбайтовый. Тип символов в строке - WideChar (по первой это не совсем понятно правда, до самого не сразу дошло:)). Char в Д2009 и выше по дефолту ссылается на WideChar, PChar - на PWideChar, string - на UnicodeString. Поэтому старые конструкции вызовов API вроде function(PChar(string)) будут работать нормально без правок: вызов API функции из системного юнита будет подставлен с суффиксом W, и тип указателя на строку будет правильным. WideString - это виндовой тип строки, известный как BSTR. Он тоже состоит из WideChar'ов. Но он не родной для Дельфи, его менеджментом занимается системная библиотека, что не есть хорошо для нас. (Хотя этот тип прекрасен не только в COM, но и для передачи строк в формате юникод из/в длл, и поддерживается если не всеми языками программирования, то многими точно :) В результате можно легко гонять строки между модулями, написанными на разных ЯП, не парясь с указателями)
> Vladimir Kladov © (22.10.10 18:30) [176] > Т.е. Вы предлагаете заменить именно WideString на KOLWideString > в KOL.pas ? Это можно. А разве для KOLString не нужно в > D20xx переопределить его тоже как UnicodeString ? Да, WideString заменить на KOLWideString. KOLString тоже нужно переопределить в UnicodeString, просто в предыдущих постах акцентировал внимание на новом типе. Всё это нужно для Д2009 и выше.
-
procedure TGraphicTool.SetLogFontStruct(const Value: TLogFont);
begin
if CompareMem(@fData.Font, @Value, SizeOf(TLogFont)) then Exit;
Move(Value, fData.Font, SizeOF(TLogFont));
Changed;
end; <- this is line 18249
function TGraphicTool.GetLogFontStruct: TLogFont; 2 Speller: уже сделано.
-
Еще вот думаю, может в Д2009 и выше следует по дефолту включать UNICODE_CTRLS?
-
Мне, честно говоря, D20XX не нужен как таковой. Уж так, для поддержания, раз уж на него народ зачем-то переходит. Наверное, кто не успел купить нормальный Delphi. Но я лучше буду пользовать нелегальную копию Delphi 3, чем ЭТО.
-
Версия 3.00Т+Использовался StrReplace для AnsiString (объявление именно AnsiString), теперь выдает несоответствие типов. Не понимаю, чем так AnsiString не угодил, он что в D2009-2010 не работает? Нафиг дублировать функи-то? function StrReplace( var S: KOLString; const From, ReplTo: KOLString ): Boolean;
var I: Integer;
begin
I := pos( From, S );
if I > 0 then
begin
S := Copy( S, 1, I - 1 ) + ReplTo + CopyEnd( S, I + Length( From ) );
Result := TRUE;
end
else Result := FALSE;
end;
function KOLStrReplace( var S: KOLString; const From, ReplTo: KOLString ): Boolean;
var I: Integer;
begin
I := pos( From, S );
if I > 0 then
begin
S := Copy( S, 1, I - 1 ) + ReplTo + CopyEnd( S, I + Length( From ) );
Result := TRUE;
end
else Result := FALSE;
end; Идентичность же 100%.
-
И опять какие-то артефакты с отрисовкой элементов. На тестовом проекте получить не удалось. Суть в том что после закрытия дочерней формы некоторые элементы не отрисовываются. В версии 3.00.P все было нормально.
-
А в пас-версии при закрытии вообще краш приложения.
-
> Vladimir Kladov © (25.10.10 08:21) [191] > > Мне, честно говоря, D20XX не нужен как таковой. Уж так, > для поддержания, раз уж на него народ зачем-то переходит. > Наверное, кто не успел купить нормальный Delphi. Но я лучше > буду пользовать нелегальную копию Delphi 3, чем ЭТО.
Ну, ХЕ (2011) уже более-менее жизнеспособна ) 2010 стала шустрее загружаться ) Юникод, хэлперы и ртти - вкусные. Поддержка хр, висты в вцл. Поэтому везде есть свои плюсы )
-
По поводу [193] и [194]. Баг в WndProc. А именно в 2х кусках кода: 1.
self_.RefInc;
TRY
if M.message = WM_KEYDOWN then
asm
nop
end;
Result := self_.WndProc( M );
FINALLY
self_.RefDec;
END;
Вернул старый код. 2. function TControl.WndProc( var Msg: TMsg ): Integer; RefInc и RefDec закомментировал.
-
В асм-версии только закомментировал RefInc/RefDec.
-
Это только на падения или на отрисовку тоже влияло? Поставил было, отлавливая свою ошибку, ошибку нашел, назад не вернул. Как бы не успел. Верну, без проблем. И еще, возвращать весь код в паскаль-версии нет особого смысла вроде бы: в реальности уже не отрабатывает этот кусок, кроме случая бага:
(Это WndFunc, а не WndProc, там тоже RefInc/RefDec был добавлен). Основной баг, который я нашел, когда-то багой не был, это была фича с двойным разрушением апплета в TerminateExecution. Ну и плюс в AlignChildrenProc не туда RefDec припечатал как выяснилось. После чего поспешил выложить T+. Не верю я, что новые Delphi когда-нибудь будут работать без тормозов в code insight. Когда при наборе кода комп регулярно замирает на несколько секунд, мне это не надо. Я вынужден либо отключать фичу, либо возвращаться к нормальному Delphi с адекватной скоростью реакции.
-
Версия 3.00.U на сайте. Проверьте со своим, MTsv DN.
|