-
Новости от 29 мая 2010 (KOL & MCK v2.91) [-] Для UNICODE_CTRLS, печать некоторых китайских символов исправлена для Memo и EditBox. VK, reported by zhoudi [+] Добавлена функция NewAlienPanel, позволяющая создавать дочернюю панель в любом окне в системе. VK [*] Большое число кода из KOL_asm.inc перемещено обратно в KOL.pas - для упрощения поиска ошибок и различия в поведении pas-версии и asm-версии кода. Запрещена Asm-версия функции TList.Add. VK [*] Изменено поведение Scrollbar-контрола. Прежняя версия доступна с использованием символа условной компиляции SCROLL_OLD. QAZ [*] Изменено поведение TStrList.Find для случая, когда найдена не в точности искомая строка: в этом случае возвращается индекс найденной строки со знаком минус. VK, mdw [*] UNICODE_CTRLS: DateTime2StrShort, String -> KOLString. mdw [*] Изменена функция ExePath: теперь она возвращает путь к основному exe-файлу, даже когда вызвана из функции из DLL. Добавлена функция ModulePath, возвращающая путь к исполнимому (самому) модулю, в том числе для DLL - путь к DLL. VK [*] UNICODE_CTRLS: Добавлено определение типа TXStrList для использования вместо TStrList или TWStrList в зависимости от символа UNICODE_CTRLS. VK [-] Функция FileSeek, параметр MoveTo: TStrmSize -> TStrmMove. QAZ [+] Добавлена функция WStr2File (для параметра PWideChar, в отличие от WideString). VK [-] Исправлены функции File2WStr, WStrSaveToFile. zhoudi [-] UNICODE_CTRL: Исправлен баг API для Combobox контрола, связанный со вставкой строковой константы. VK, QAZ, [-] TControl.SetDateTime исправлен для случая присваивания нулевой даты или только времени. VK [-] TControl.REGetFont - исправлено. VK [*] Под Windows Vista и Windows 7 (и для будущих версий Windows), GetDesktopRect перенаправлен на GetWorkArea так как окно рабочего стола имеет теперь размеры, совпадающие с размерами экрана, и не принимается в расчет даже панель задач. VK [-] WndProcNotify - исправлена asm-версия (падение приложения при переключении тем в Windows XP и далее). VK [-] KOLMediaPlayer - исправлено компилирование asm-версии. VK [*] KOLmath.pas: добавлен символ MATH_NOERR, запрещающий подключение модуля err и обработку ошибок (для использования некоторых функций из KOLmath, не требующих такого контроля). VK MCK не менялся. Архивы kol.zip, kol_err.zip, KLMediaplayer.zip см. на http://kolmck.net
-
Владимир, огромное спасибо за релиз, соавторам изменений тоже выражаю свою благодарнось.
-
аяй procedure TControl.SetSBMinMax(const Value: TPoint);
begin
GetSBMinMax;
if (Handle <> 0) then
SetScrollRange(Handle, SB_CTL, Value.X,
Value.Y + SBPageSize - 1, True)
else
fSBMinMax := Value;
end;
а надо procedure TControl.SetSBMinMax(const Value: TPoint);
begin
GetSBMinMax;
if (Handle <> 0) then
SetScrollRange(Handle, SB_CTL, Value.X,
Value.Y + SBPageSize - 1, True)
else
fSBMinMax := Value;
end;
т.е. -1 это лишнее, на одну позицию недоскролит
-
а мошт функции которые SH...A,SH...W загнать в уникодные ифдефы как все остальные? еще встречаются подозрительные парочки функций с окончанием А,например AnsiCompareStr\AnsiCompareStrA которые вроде используют одну и туже CompareStringA, но имеют разные параметры KOLString\AnsiString, а KOLString может быть уникодным...
-
Я же по вашему коду брал, из сообщения [31] с теме Версия 2.90. Могу и заменить, прямо в этой же версии, апдейты ушли в прошлое. Пометить 2.911 просто. ------------------------------------------------------------------
По поводу SHGetFileInfoA SHFileOperationA SHBrowseForFolderA SHGetPathFromIDListA - они и так не используются при UNICODE_CTRLS, Версии W было важно отсечь для компиляции в Delphi2, который не понимает уникод. Остальные версии еще и не должны (бы) добавлять функцию в таблицу импорта. Если бобавляют, то тогда да, надо внутрь IFDEF'а.
AnsiCompareStr использует AnsiCompareString, в случае UNICODE_CTRLS это как раз функция из KOL_unicode.inc: function CompareString; external kernel32 name 'CompareStringW';
AnsiCompareStrA всегда вызывает CompareStringA. Иногда в юникодовском приложении нужна работа с анси-строками.
-
> Я же по вашему коду брал, из сообщения [31] с теме Версия > 2.90
это я ищо до тестового примера написал там где я это использовал 1 была не критична\не видна а в тестовом потом убрал -1 тк сразу видно что лишнее
-
Обновил до 2.911.
-
> Обновил до 2.911.
упс,как быстро а я вот еще посмотрел и получается что
procedure TControl.SetSBPageSize(Value: Integer);
var
SI: TScrollInfo;
begin
fSBPageSize := Value;
if (Handle <> 0) then begin
FillChar(SI, SizeOf(SI), #0);
SI.cbSize := SizeOf(SI);
SI.fMask := SIF_PAGE or SIF_RANGE;
SBGetScrollInfo(SI);
if (SI.nMax = 0) and (SI.nMin = 0) then
SI.nMax := 1;
SI.nMax := SI.nMax - Integer(SI.nPage) + Value;
SI.nPage := Value;
SBSetScrollInfo(SI);
end;
end;
а надо
procedure TControl.SetSBPageSize(Value: Integer);
var
SI: TScrollInfo;
begin
fSBPageSize := Value;
if (Handle <> 0) then begin
FillChar(SI, SizeOf(SI), #0);
SI.cbSize := SizeOf(SI);
SI.fMask := SIF_PAGE or SIF_RANGE;
SBGetScrollInfo(SI);
if (SI.nMax = 0) and (SI.nMin = 0) then
SI.nMax := 1;
SI.nMax := SI.nMax - Integer(SI.nPage) + Value;
SI.nPage := Value;
SBSetScrollInfo(SI);
end;
end; смотрел по скролу встроенуму в мемо там мин=0 и макс=0 это норм а если макс<пейдж то скролл выключен (можно конечно добавить это на усмотрение)
-
> там мин=0 и макс=0 это норм
а по коловски получается что например скролить нечего,а скрол показывает что есть (когда SI.nMax := 1;)
-
Может, вообще лучше убрать это if (SI.nMax = 0) and (SI.nMin = 0) then
SI.nMax := 1;
-
> Может, вообще лучше убрать это
незнай ,выш для чегото это придумали а с учетом того что по умолчанию будет правильный (если ищо чего не всплывет) вариант,то вобще без разницы
-
А я не помню. Может, оно иначе не работало вообще, в какой-нибудь 98. Если бы я комментарии к каждой строчке писал, проблем бы было меньше, с одной стороны. А с другой больше. Придется условной компиляцией бороться, на случай если всплывет бяка.
-
2.912
-
ну типерь можно спокойно перейти с 2.79 версии :)
кстати а почемубы не обновлять кол также оперативно в будущем? типа не копить косяки полгода а потом разгребать а сразу ,появился - исправили - +0.001 к номеру версии и выложить на сайт
-
Это потому что я сегодня в отпуске 1й день. Но в субботу я все равно улетаю до конца месяца. А зачем Вам такая оперативность, если вы не хотите с 2.79 расстаться.
-
В методе TObj.Destroy в случае определенных {DEBUG_ENDSESSION} и {USE_NAMES} для функции Int2Hex передается неверный список аргументов. директивы опущены'FINALLED: ' + Int2Hex( DWORD( @ Self ) + ' (name:' + FName + ')' , 8 ) предполагалось скорее всего: destructor TObj.Destroy;
begin
Final;
if EndSession_Initiated then
LogFileOutput( GetStartDir + 'es_debug.txt',
'FINALLED: ' + Int2Hex( DWORD( @Self ), 8 )
+ ' (name:' + FName + ')'
);
...
-
> не хотите с 2.79 расстаться.
уже хочу, все критичные для мну вещи уже исправлены
-
Владимир, увидел новый тип PXStrList, но ведь он дублирует ранее определенный PKOLStrList? ...
PXStrList = PWStrList;
PXStrList = PStrList;
...
type TKOLStrList = TWStrList;
PKOLStrList = PWStrList;
type TKOLStrList = TStrList;
PKOLStrList = PStrList;
type TKOLStrList = TStrList;
PKOLStrList = PStrList;
...
-
Еще промелькнуло...~строка 32153 в обоих случаях (_D2) GetScrollInfo одинаков.
GetScrollInfo( Sender.fHandle, Bar, SI );
GetScrollInfo( Sender.fHandle, Bar, SI );
-
На сайте 2.92. Серьезное исправление: StrComp_NoCase + TStrList.IndexOf_NoCase, XStrList убрал, NewKOLStrList+NewKOLStrListEx добавил. Немного по todo пробежался, что-то поубирал в комментариях. Анонс делать буду позже, вечером время будет. Побегу дальше собирать документы.
-
Про DEBUG_ENDSESSION и USE_NAMES не дочитал. Но это и не к спеху, если вам надо, вы же у себя поправите. Вроде бы я DEBUG_ENDSESSION делал для тестирования проблем с выходом программы, в далекие-далекие времена, когда это еще было сырое и не доделанное.
-
Тестировалось с модифицированной 2.87, но что-то мне подсказывает, что и в этой версии будет тот же эффект и похоже это снова темы пример: http://slil.ru/29256063 Если изменить размер окна до минимального возможного по высоте (на самом деле эффект проявляется раньше) то загрузка процессора 100%. Все бы ничего, но если из такой минимизированной формы создается либо дочерняя либо тот же MessageBox - приложение зависает.
-
Еще одна ошибка, проявляется только с директивой TLIST_FAST - пример элементарный: tmp := NewList(); tmp.Clear; tmp.Capacity := 1000; tmp.Add(tmp2);
-
Под аэрой в новой версии ничего не виснет, под стандартными темами без аэро тоже, и под классикой тишина, при переключениях тоже. Может, давно исправлено, может потому что 7ка отличается от XP.
Исправление для TLIST_FAST+Capacity в 2.921 на сайте, архив kol.zip как обычно. Описание изменений выложил:
[*] Типы PXStrList, PXStrListEx удалены, вместо этого добавлены функции NewKOLStrList и NewKOLStrListEx для работы с PKOLStrList и PKOLStrListEx. RegKeyGetSubKeys, RegKeyGetValueNames, TIniFile.GetSectionNames, TIniFile.SectionData перенаправлены на использование TKOLStrList. [+] Функция TCanvas.TextOut: String -> KOLString; Добавлена функция TCanvas.TextOutA (особо для AnsiString при включенной опции UNICODE_CTRLS) [-] Исправлена функция StrComp_NoCase, другая оптимизированная версия кода добавлена для нее и для StrLComp_NoCase. Предыдущая (но исправленная) версия доступна через символы SMALLER_CODE и SMALLEST_CODE. [-] Исправлена функция TList.SetCapacity для TLIST_FAST и значения > 256.
-
Проверил с 2.91 - и под XP и под 7 загрузка 1 ядра проца 100%
-
CPU0-33%, CPU1-max78%. FastMM & FastMove закомментарил сразу. Grush не устанавливал, он у меня не устанавливается, так запустил, без открытия формы в дизайнере. Попробуйте переделать без grush. Или (что проще) назначьте minWidth/minHeight для формы и не парьтесь. А темы совершенно не при чем, результат одинаковый и в классике.
-
Да темы похоже действительно не при чем, как и груши.
-
Привет
При UNICODE_CTRLS, ошибка с асм-версия TCanvas.TextOut...
-
Еще одна непонятка с последними версиями. Почему при включенной UNICODE_CTRLS в EditBox вместо нормальной обработки системный сочетаний, например, CTRL+V пишутся символы... http://slil.ru/29261593
-
Для чего было добавлено:
Result.AttachProc( WndProcUnicodeChars );
-
Ошибку понял, вечером поправлю. Это для китайского языка. Не подумал, что ctrl+буква шлет WM_CHAR. Заодно и Enter сломался, тоже не заметил. В принципе, достаточно наверное проверить, что код символа >= ' ' (32). Но можно еще и нажатие клавиш Ctrl/Alt/LWin/RWin отсечь.
Кто будет китайский проверять: иероглиф SAN (три), пишется как три горизонтальные черты 三, с клавиатуры сам в EditBox не вставляется, хотя WM_CHAR приходит исправно, и таких много.
-
наскока я понимаю все контролы виндовые с соответствующим шрифтом искаропки китайский поддерживают а если в коле проблемы,значит гдето вилосипед с квадрат колесом
а если например блокнот также сибя ведет-это не проблемы кола и врятли стоит в это вмешиваца
-
> Заодно и Enter сломался, тоже не заметил. И ESC...
-
> Кто будет китайский проверять По ходу тот кого это касаемо, т.е. zhoudi.
-
Правильная поддержка азиатских языков требуется не только китайцам(проблема не только с китайским, можете погуглить по поводу Microsoft IME, проблемы есть и с японским, и с некоторыми другими двухбайтными кодировками).
Но блокнот проблем не имеет, как не имеют и все известные мне программы с полем для ввода текста. Очевидно, они обходят эту проблему MS IME таким простым способом. Если дефолтная обработка WM_CHAR съедает некоторые символы, но их можно вставить, самостоятельно обработав в контроле WM_CHAR, то почему бы этого не сделать. Тем более что MS не собирается исправлять этот баг и в будущем, как и многие другие (вспоминается недавно всплывшая проблема со вставкой в комбосписок констант, так же благополучно унаследованная уже Win7).
-
Обновил до 2.93: [+]
Добавлены функция WStrComp_NoCase и метод TWStrList.IndexOf_NoCase (очень медленный код, только для совместимости с TKOLStrList).
[*]
LogFileOutput: String->KOLString.
[-]
TCanvas.TextOut - исправлена для UNICODE_CTRLS в asm версии.
[-]
Печать сочетаний клавиш и спец символов (Ctrl+C, Ctrl+V, Enter, Escape etc.) исправлена в мемо для UNICODE_CTRLS.
[+]
KOL_unicode.inc: добавлены определения для ресурсных констант RT_RCDATA, RT_BITMAP, и т.п. - для UNICODE_CTRLS.
[-]
MCK: Установка обработчика OnLVEndEditItem более не требуется для успешного редактирования, но только для MCK.
[*]
UNICODE_CTRLS: дополнительные изменения (в основном String -> KOLString) в множестве дополнительных модулей: err.pas, KOLadd.pas, KOLDirDlgEx.pas, Lnk.pas, Animation.pas, KOLGif.pas, KOLPCX.pas, KOLTGA.pas.
-
-
а можна ради интерес для теста прогу с вводом чайны ? и как писать с клавы ?
-
KOL.zip - re-uploaded. Seems forgot to update kol.pas iself there. Сечас должно быть на месте.
-
Привет. Владимир, сделайте у себя пометочку плиз. Файл MCKAppExpert200x.pas: dlg.Filter := '*.dpr';
dlg.Filter := '*.pas'; заменить на: dlg.Filter := 'DPR files|*.dpr';
dlg.Filter := 'PAS files|*.pas'; Для совместимости с Windows 7
-
Блин, во склероз. Новая версия visual_xp_styles.inc. http://slil.ru/29278311Изменения: - Исправлена отрисовка GroupBox. - Исправлена отрисовка BitBtn. В частности: -- отрисовка изображения при выключенном элементе на основе исходного PBitmap (Convert2Grayscale) -- отрисовка изображения при НЕ установленом ImageList -- проверка на опцию bboFocusRect с соответствующей отрисовкой элемента.
-
MTsv DN: а картинка с текстом на BitBtn по-прежнему по разным углам кнопки или как у приличных людей - рядом ?
-
При использовании тем нормально. Без тем раскидано. Если я правильно понял Ваш вопрос. Проверить то сами можете...
-
Привет... 1. ASM версия NEW_MODAL - "кривая". Спасает pas-версия. 2. Однако в WndProcForm, нужно кое-что править. А именно кусок: if Self_.fModalForm <> nil then
SetFocus( Self_.fModalForm.fHandle )
else if ( Self_.FCurrentControl <> nil ) and
not ( Self_.fCurrentControl.IsForm xor Self_.fIsApplet ) then
http://slil.ru/29287552
-
Как вернусь (числа 29-го), так и поправлю. Сейчас я в Сочи. Отпуск у меня. Пока асм-версию этой функции отключаете, и работаете. В kol.pas заменить
на
>, в KOL_asm.inc (если асм-версия там) эту функцию просто закомментируйте. Или через {$IFDEF TURN_ON} ... {$ENDIF} - тоже комментарий.
-
> - Исправлена отрисовка BitBtn. В частности: > -- отрисовка изображения при выключенном элементе на основе > исходного PBitmap (Convert2Grayscale) > -- отрисовка изображения при НЕ установленом ImageList > -- проверка на опцию bboFocusRect с соответствующей отрисовкой > элемента.
очередной велосипед? в ХР и выше баттоны с картинками рисуются без всяких извращений и самопальных отрисовок
-
Не нравится, делайте своё...флаг Вам в руки.
-
2MTsv DN: MCKAppExpert200x - такого что-то не найду. Есть KOLAppExpert200, но там таких строчек не нашел. visual_xp_styles положите еще раз, тот похоже уже ушел.
На сайте kol 2.94 - исправлен NEW_MODAL (asm - тоже исправлен - по крафней мере, запускается проект из 1 формы, дальше не смотрел, пока не знаю, что там еще происходит).
-
KOL 2.94 установлен флаг STREAM_LARGE64 delphi 7 генерит неверный код в некоторых функциях работы с файловыми потоками, что приводит к потере старшего DWord'а в 64битном выходном слове. Данная проблема решается небольшим исправлением (выделено жирным) следующих функций: function FileSeek(Handle: THandle; const MoveTo: TStrmMove; MoveMethod: TMoveMethod): TStrmSize;
var HiPtr: DWORD;
begin
HiPtr := MoveTo shr 32;
Result := SetFilePointer(Handle, DWORD( MoveTo ), @ HiPtr, Ord( MoveMethod ) );
if (DWORD( Result ) = $FFFFFFFF ) and
(GetLastError <> NO_ERROR) then
Result := -1; if Result >= 0 then
Result := Result or (int64(HiPtr) shl 32);
Result := SetFilePointer(Handle, MoveTo, nil, Ord( MoveMethod ) );
end; function GetSizeFileStream( Strm: PStream ): TStrmSize;
var SizeHigh: DWORD;
begin
Result := GetFileSize( Strm.fData.fHandle, @ SizeHigh );
Result := Result or (int64(SizeHigh) shl 32);
Result := GetFileSize( Strm.fData.fHandle, nil );
if Result = DWORD( -1 ) then Result := 0;
end;
-
а почему нет версий int2... для cardinal ? ибо переполнение или минус при приведении к integer ни есть срост
-
> а почему нет версий int2... для cardinal ?
UInt2...
-
в текущей версии TrackBar не "фокусируется" через вот так -> Pcontrol(Sender).Perform(WM_SETFOCUS,0,0);
может всетаки добавите TrackBar в кол,всетаки стандартный контрол а экономить число строк в kol.pas можно и другими методами
-
Не понял, что Вы хотите добавить, в KOL.pas разве есть трекбар? Я так вообще зарекся использовать этот нестандартный стандартный компонент, предпочитаю KOLTracker.
-
просто спрошу что изменилось в KOL что парестал работать Pcontrol(Sender).Perform(WM_SETFOCUS,0,0); Sender=тракбар в KOL 2.79 работает в 2.94 нет?
-
-
2Jon: file is renamed it is now can be downloaded through the link above.
2QAZ. Там слишком много изменений в KOL между этими версиями. Попробуйте Tracker1.TabStop := true; , желательно до создания окна, хотя бы запихнуть вовнуть тракбара. Этот код должна была бы обеспечить mck-часть mckССtrls.pas, я сейчас не успею глянуть до понедельника.
-
Возможно это было изменение в CCtrls.pas, связанное с поддержкой unicode_ctrls, заодно в том числе я убрал TabStop, т.к. обнаружил, что он все равно не ловит фокус по клавише Tab. Возможно, случайно так получилось, пока экспериментрировал. К сожалению, исходников прежней версии от CCtrls у меня кажется не сохранилось.
-
если вы про KOLCCtrls.pas то оно лежит http://kolmck.net и я его и использую уникода там и в помине нет , ибо текста он не рисует а менял я только кол ,причем если просто при буилде заменить папку старую на новую - то фокусирует, а если переустановить на новый то нет завтра точней обрисую
-
если Result.Tabstop:=True; впихнуть в NewTrackbar то фокусирует но както это не прально,чотогдето нетак гдето KOL неверно обрабатывает WM_SETFOCUS и зачем он его обрабатывает?
-
несрост в function TControl.DoSetFocus: Boolean;
-
> несрост в function TControl.DoSetFocus: Boolean;
хотя он такойже как и в старой версии, вобщем хз
|