Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Вниз

Версия 2.83   Найти похожие ветки 

 
Vladimir Kladov ©   (2007-10-12 23:32) [0]

            Новости от 12 октября 2007 (KOL & MCK v2.83)

[-]  Исправлен  метод TList.Assign. Спасибо mdw за bug-репорты касаемо
TList и символа TLIST_FAST.

[-]  Для  символа  TLIST_FAST,  исправлено  свойство  TStrList.Text  и
использующие его методы LoadFromFile, SaveToFile и.т.д.

[-]  Для  ASM_VERSION, исправлена функция CallTControlCreateWindow (не
возвращала полученный от CreateWindow результат. Это приводило к багам
в случае частого пересоздания окон).

[+]  ToGRush  усовершенствован:  исправлен  scrollbar, все scrollbar-ы
включая  в  выпадающем  списке  combo,  теперь могут быть замещены для
стиля GRush, кнопка со стрелкой в combo так же в стиле GRush.

Так  же,  в  KOL: добавлен стиль esSolid к списку типа TEdgeStyle (для
панелей),   чтобы   позволить   создание  простой  панели  esNone  без
прозрачности  вместо  GRush-панели,  при необходимости (обычная панель
всё-таки  намного  быстрее,  и  больше  подходит  для  случаев больших
панелей,   которые  еще  и  могут  изменять  свой  размер.  Установкой
соответствующего  общему  стилю  цвета  (Color)  вполне можно добиться
единства внешнего вида, тем не менее).

Так  же,  в  MCK: для ряда контролов, могущих иметь внутренние линейки
прокрутки,  доступно свойство OverrideScrollbars. Значение его true по
умолчанию,   но   генерируемый   код   заключается  в  скобки  {$IFDEF
OVERRIDE_SCROLLBARS}...{$ENDIF}.  Т.о.,  для  замены  скроллбаров  при
использовании  ToGRush, достаточно добавить символ OVERRIDE_SCROLLBARS
к  опциям  проекта.  Писатели  компонентов  (контролов  с  внутренними
скроллами)  должны  так же присвоить TRUE полю fHasScrollbars2Override
(protected),   для   обеспечения   генерации   соответствующего  кода.
Разумеется,  всегда  можно вызывать функцию OverrideScrollbars в своём
коде  (если  не используется MCK или контрол в зеркале не поддерживает
свойство OverrideScrolbars).

См  так  же  новую  версию  KOLDirDlgEx (в архиве KOLadd.zip), который
использует возможность переопределения прокруток на стиль GRush, когда
включён символ USE_GRUSH.

[*]   Свойство   ParentWindow   теперь  всегда  возвращает  дескриптор
родительского  окна, независимо от того, является ля родительское окно
"своим" или "чужим" (установленным функцией API SetParent).

[-]   Процедуры   TControl.DoSetFocus   и   WndProcForm   (asm-версии)
исправлены   (обнаружены   небольшие  баги,  ранее  себя  серьёзно  не
проявлявшие,  но  мешавшие  корректной  работе заменителей прокруток в
стиле GRush).

[-]   TControl.SetCaption   -  исправлена  asm-версия:  у  LabelEffect
заголовок  не  изменялся при присваивании значения (не вызывался метод
Invalidate.  Вместо  того,  вызывался  лишний  Invalidate  для обычной
метки).

[+]  Для  форм  со  свойством CanResize = FALSE, соответствующий пункт
системного меню теперь делается недоступным.


 
thaddy   (2007-10-13 02:22) [1]

++++ for this year...


 
Robt ©   (2007-10-16 15:13) [2]

А ТОРМОЗА КАНВАСА+БИТМАП ПРИ РИСОВАНИИ БУДУТ ПРАВИЦА ?


 
homm ©   (2007-10-16 15:15) [3]

> [2] Robt ©   (16.10.07 15:13)

Какие тормоза?


 
Elec3C ©   (2007-10-16 17:18) [4]

Хм!? На сайте только 2.80 версия (http://www.kolnmck.ru/files1.shtml).


 
SergeR ©   (2007-10-16 17:21) [5]

http://kolmck.net/r_updates.htm


 
Vladimir Kladov ©   (2007-10-16 19:45) [6]

НЕТ НЕ БУДУТ

Объявлется переменная C: PCanvas; присаивается и дальше используется, вместо того чтобы её каждый раз получать заново.


 
Robt ©   (2007-10-17 08:13) [7]


> Объявлется переменная C: PCanvas; присаивается и дальше
> используется, вместо того чтобы её каждый раз получать заново.
>

а в битмапе канвас пересоздается при каждой операции рисования типа lineto ?


 
Vladimir Kladov ©   (2007-10-17 15:16) [8]

Разберитесь. Что спрашивать? Или я должен помнить каждый нюансик в 100000 строк кода? Мне непонятно вообще, зачем в том примере, что был приведён выше, через канву рисовать. Есть гораздо более быстрый способ. ScanLine[] есть, формат битмапа знаете. И вперёд.


 
mdw ©   (2007-10-18 11:37) [9]

Владимир, очередной баг в TLIST_FAST. Вот простейший пример:
procedure TMainForm.Button2Click(Sender: PObj);
var SLE: PStrListEx;
   i: Integer;
begin
   SLE:= NewStrListEx;
   for i:= 0 to 100000 do begin
     SLE.AddObject(Int2Str(Random(1000)), i);
   end;
   SLE.Sort(False); // здесь валится
   SLE.Free;
end;


 
mdw ©   (2007-10-18 11:46) [10]

К предыдущему посту. Проявляется только на ASM_VERSION.


 
Vladimir Kladov ©   (2007-10-18 15:59) [11]

Посмотрю.


 
Vladimir Kladov ©   (2007-10-18 21:09) [12]

Надо в процедурах сортировки {$IFDEF ASM_VERSION} заменить на ...ASM_TLIST} и такие же скобки добавить в KOL_ASM.inc. Процедуры CompareStrListItems  и CompareAnsiStrListItems. Т.е. попросту отключить асм для них двух.


 
mdw ©   (2007-10-19 11:00) [13]

Владимир, спасибо. Вроде заработало (TLIST_FAST). Еще потестирую конечно, но пока работает.


 
mdw ©   (2007-10-22 19:23) [14]

Владимир, заметил небольшой баг при генерации кода для создания меню.
Вот код полученный с помощью MCK
...
   Result.MainMenu1 := NewMenu( Result.Form, 0, [ "11111111"  , "3333333", "3333333333", "" ], nil );
...
   Result.MainMenu1.Items[ 0 ].OwnerDraw := TRUE;
   Result.MainMenu1.Items[ 1 ].OwnerDraw := TRUE;
   Result.MainMenu1.Items[ 2 ].OwnerDraw := TRUE;
     Result.MainMenu1.OnMeasureItem := Result.MainMenu1MeasureItem;
     Result.MainMenu1.OnDrawItem := Result.MainMenu1DrawItem;
...
Так вот, OnMeasureItem не будет ни разу вызван. OwnerDraw := TRUE нужно ставить после назначения события. Наверное нужно переносить назначение OwnerDraw из TKOLMenu.SetupFirst в TKOLMenu.SetupLast.


 
Vladimir Kladov ©   (2007-10-22 21:10) [15]

У меня вызывается. Так что дело не в этом (если у вас не вызывается).


 
mdw ©   (2007-10-23 00:33) [16]

Владимир, это маин меню, которое в строчку под заголовком формы.


 
mdw ©   (2007-10-23 12:32) [17]

Владимир, вот минимальный проект www.kolnmck.ru/Test.rar.
Я туда же mirror.pas положил с изменениями.


 
mdw ©   (2007-10-23 14:03) [18]

Еще исправление для TLIST_FAST:

//[function TStrList.GetPChars]
{$IFDEF ASM_TLIST}
{$ELSE ASM_VERSION} //Pascal
function TStrList.GetPChars(Idx: Integer): PChar;
begin
 Result := PChar( fList.{$IFDEF TLIST_FAST}Items{$ELSE}fItems{$ENDIF}[ Idx ] )
end;
{$ENDIF ASM_VERSION}

Ну и в KOL_ASM.inc тоже:
{$IFDEF ASM_TLIST}
function TStrList.GetPChars(Idx: Integer): PChar;
asm
       MOV      EAX, [EAX].fList
       MOV      EAX, [EAX].TList.fItems
       MOV      EAX, [EAX+EDX*4]
end;
{$ENDIF}


 
mdw ©   (2007-10-23 14:30) [19]

Еще баг для TLIST_FAST, ASM_VERSION.
Валится в TStrList.IndexOf() при Count >= 256.
Например:
var    SLE: PStrListEx;
       i: Integer;
begin
   SLE:= NewStrListEx;
   for i:= 0 to 256 do  SLE.AddObject(Int2Str(random(1000)), i);
   SLE.IndexOf("2"); //Здесь падает


 
mdw ©   (2007-10-23 16:22) [20]

Владимир, опять про TLIST_FAST.
Возникла ошибка при разрушении меню при кол-ве элементов >= 256. Причина в TList.ReleaseObjects. Там цикл разрушения идет от 0 to Count. Т.е. сперва разрушается 0 элемент, затем 1 и т.д. Но при разрушении меню происходит удаление этого пункта из списка. Результат понятен...
В общем нужно или в TList.ReleaseObjects объекты разрушать с последнего к первому (тогда и TList.Release тоже). Так наверное правильно будет. Вот примерно так поправил:

procedure TList.ReleaseObjects;
...
 {$IFDEF TLIST_FAST}
 if fUseBlocks and Assigned( fBlockList ) then
 begin
   for i := fBlockList.Count div 2 - 1 downto 0 do
   begin
     CountCurrent := Integer( fBlockList.fItems[ i*2+1 ] );
    BlockStart := Pointer(Integer(fBlockList.fItems[ i*2 ]) + (CountCurrent-1)*4);
     for j := CountCurrent-1 downto 0 do
     begin
       if BlockStart^ <> 0 then begin
         PObj( Pointer( BlockStart^ ) ).Free;
       Dec( BlockStart );
     end;
   end;
 end
   else
 {$ENDIF}
...

Или в function NewMenu(..) добавить Result.FItems.fUseBlocks:= False;


 
Vladimir Kladov ©   (2007-10-23 18:14) [21]

Нет, майн не тестировал У меня как-то так получилось, что майн меню перекрашивать не пришлось. Значит, если поменять порядок, то работает? Да, так вроде пашет, даже что-то рисует если код добавить.

По TLIST_FAST пробежал с грабляси (ctrl+F), еще до кучи нашёл. В обновлении будет. В основном это для контролов если дочерних > 256, так что не особо печально. Но есть места в DirList"е, а там почти наверняка может оказаться > 256 файлов в директории.


 
Vladimir Kladov ©   (2007-10-23 18:30) [22]

Лучше поставить от последнего к первому. Я еще как сейчас помню, лет так 9-10 назад, когда этот цикл, задумался на минуту: надо ли обращать порядок уничтожения. И мне тогда показалось, что не надо. Оказалось спустя 10 лет что всё-таки было надо :))


 
Vladimir Kladov ©   (2007-10-23 19:29) [23]

А нет, тогда я пришёд к тому что лучше обращать. Наверное просто из соображений экономии кода. Ав от сейчас - с тлист-фаст, экономии кода не получается. Но он и не для экономии кода, вообще. Надо все-таки обрашать, мало ли где еще ружжо выстрелит. К обновлению перепишу цикл по-простому.


 
Barloggg   (2007-10-24 16:44) [24]

хм. а почему по умолчанию для ScrollBox выключен AcceptChildren?
Это какой-то хитрый план?


 
Barloggg   (2007-10-24 16:46) [25]

и кстати у группбокса тоже


 
Barloggg   (2007-10-24 18:16) [26]

эмм... а как средствами КОЛ переименовать файл?
я увидел процедуру DoFileOP которая вроде как должна этим заниматься.
правда она по скобкой WIN_GDI.
Указал эту директиву.
Но дельфи не может найти константу FO_RENAME!
Нашел ее поиском. оказалось что эта константа спрятана под еще одной директивой WIN. Лады, ввел эту директиву тоже.
Но и тогда она не нашлась!
Даже в книгу полез. Там вообще про файловые операции - ни слова.
Дальнейшее разглядывание выявило, что эта константа вообще находится в секции implementation.
Это, извините, зачем? План не просто хитрый, но еще и крепкий? или эта процедура только для внутренних целей предназначена?
Заменив константы их значениями требуемое поведение кода было достингуто, но недоумение осталось.


 
ANTPro ©   (2007-10-24 19:15) [27]

> [26] Barloggg   (24.10.07 18:16)

Чем это не устраивает?
function RenameFile(const OldName, NewName: string): Boolean;


 
Vladimir Kladov ©   (2007-10-24 22:04) [28]

В скроолбокс забыл включить. Точнее, по ошибке включил в скролбаре вместо скролбокса. У себя поправил уже, в 2.84 будет.

Если у вас не WIN и не GDI, то зачем их включать. Не проще ли найти константу и поставить в параметре числовое значение, которое её соответствует.


 
homm ©   (2007-10-24 22:07) [29]

> [28] Vladimir Kladov ©   (24.10.07 22:04)
> в 2.84 будет.

Владимир, а вот это будет? (вдруг не видели…)
http://delphimaster.net/view/11-1163789456/


 
Vladimir Kladov ©   (2007-10-24 22:29) [30]

Видел уже, вчера расшифровывал вашу шифрограимму :)


 
Barloggg   (2007-10-25 11:49) [31]


> ANTPro ©   (24.10.07 19:15) [27]
> > [26] Barloggg   (24.10.07 18:16)
> Чем это не устраивает?
> function RenameFile(const OldName, NewName: string): Boolean;


дык елы палы НЕТУ функции RenameFile в kol.pas

зато есть в SysUtils.pas, а это, извините, уже VCL.


> Vladimir Kladov ©   (24.10.07 22:04) [28]
> Если у вас не WIN и не GDI, то зачем их включать. Не проще
> ли найти константу и поставить в параметре числовое значение,
>  которое её соответствует.

Ну, я так и сделал (см [26]), но нафига спрашивается нужны тогда константы? только дезориентируют.

А зачем сделано это:

> Если у вас не WIN и не GDI


 
mdw ©   (2007-10-25 13:07) [32]


> дык елы палы НЕТУ функции RenameFile в kol.pasзато есть
> в SysUtils.pas, а это, извините, уже VCL.

Зато в Windows есть MoveFile.


 
ANTPro ©   (2007-10-25 19:37) [33]

> [31] Barloggg   (25.10.07 11:49)

Мега сложная функция :)
function RenameFile(const OldName, NewName: string): Boolean;
begin
 Result := MoveFile(PChar(OldName), PChar(NewName));
end;



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.058 c
2-1217531336
Newss
2008-07-31 23:08
2008.09.14
Пересечение фигур


2-1217687765
BlueDragon
2008-08-02 18:36
2008.09.14
Поиск скрытых файлов


2-1217517743
altatr
2008-07-31 19:22
2008.09.14
Использование процедур


2-1217389405
Viod
2008-07-30 07:43
2008.09.14
Работа с TTreeView


2-1217753286
fokas
2008-08-03 12:48
2008.09.14
аналог TreeView без скролов + ScrollBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский