Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Версия 2.80 [Delphi, KOL/MCK, Windows]


Страницы:   1 2

Vladimir Kladov ©   (2007-09-19 20:13:00) 

Новости от 19 сентября 2007 (KOL & MCK v2.80)

[*] Добавлена и установлена в качестве нового обработчика по умолчанию
процедура  прозрачности,  разработанная  Александром Карпинским a.k.a.
homm.  По сравнению с прежней процедурой (доступной включением символа
OLD_TRANSPARENT)   добавляет   лишь   около   60  байт,  но  при  этом
эффективнее,   т.к   значительно   уменьшает   количество   прорисовок
контролов.

[*] Процедура выравнивания контролов на форме по умолчанию выполняется
новым  вариантом,  разработанным  Александром  Карпинским a.k.a. homm.
Прежняя  процедура доступна с использованием символа OLD_ALIGN. (Новая
процедура  более  эффективна,  приводит  к  меньшему  числу  изменений
размеров контролов).

[*] С новым символом TLIST_FAST существенно изменяется алгоритм работы
и  размещения  в  памяти  элементов  базового  списка. В этом варианте
оптимизируется   работа  с  большими  списками,  в  основном  за  счёт
уменьшения   количества   перераспределений   памяти   и  последующего
уменьшения  дефрагментации кучи. Но этот алгоритм требует больше кода,
и может оказаться неоптимальным по скорости для каких-либо применений.
Для TList добавлено свойство ItemAddress.

[*]  С  новым  символом  SNAPMOUSE2DFLTBTN  алгоритм  процедур MsgBox,
ShowMsg,   ShowMessage  изменяется  таким  образом,  чтобы  обеспечить
автоматическую  установку курсора мыши на кнопку по умолчанию - если в
системе   выставлена  такая  опция  для  мыши.  Аналогично,  изменения
работают для ShowQuestion / ShowQuestionEx (из KOLadd).

[-]  Исправлена работа стандартного OpenDirDlg при назначенном событии
OnSelChanged для Windows95 (не становилась доступной кнопка OK), и для
UNICODE_CTRLS с этим же событием исправлены типы данных.

[+] Добавлены средства для упрощения разработки кнопок с произвольными
дочерними  элементами  (для  помещения  на  кнопки, например, картинок
вместе с текстом):
-  в  MCK  для  всех  контролов  добавлено свойство времени разработки
AcceptChildren.  Включение  его  в  TRUE позволяет во время разработки
положить на этот контрол дочерние элементы.
-  в  KOL  добавлена  функция,  а  в  MCK  -  соответствующее свойство
MouseTransparent,  использование  которого для контрола перенаправляет
все сообщения мыши к родительскому (или лежащему слоем ниже) контролу.
-  в  KOL объект TImageShow для вывода изображения использует свойства
ClientLeft,  ClientTop  для  смещения  изображения  при  выводе (в MCK
соответствующие   свойства  MarinLeft  и  MarginTop  опубликованы  для
зеркала TKOLImageShow).
- в MCK для кнопки опубликовано свойство Border.

[*] Файл visual_xp_styles.inc изменён автором, MTsvDN:
1. Отрисовка всех элементов (точнее, заднего фона для каждого элемента).
2. Исправлено создание шрифта.
3. Исправлена прорисовка границ панели.
4. Исправлен 2ой клик на сплиттере.
5. Оптимизирован код, за счет этого размер уменьшился на 3кБ.
6. Добавлена обработка TextAlign для GroupBox.
7. Исправлена работа с UNICODE и ANSI.
8. Маленькое исправление для радиобокса.
9. Отрисовка сплиттера приближена к стандартному.

[*]  Для memory stream при прямой установке Size по умолчанию значение
не   округляется   теперь  в  большую  сторону  до  очередной  границы
CapacityMask, а используется как есть. Прежнее поведение можно вернуть
символом OLD_MEMSTREAMS_SETSIZE.

[-]  Работа  свойств  AnchorXXXX  исправлена  для нового варианта кода
(оставлен  по  умолчанию, и прежний вариант так же доступен с символом
ANCHORS_WM_SIZE) .

[-]  Исправлена ошибка в обработчике сообщения WM_WINDOWPOSCHANGED для
toolbar-контрола  (возвращалось  true  вместо  false).  Эта  ошибка не
давала правильно выравнивать дочерние контролы на тулбаре.

[-]   По   совету   MTsvDN,  в  процедуре  WndProc_RichEdTransp_Update
добавлена  обработка  сообщения  WM_CHAR,  что предотвращает появление
"следов"  от  каретки  во  время  печатанья  в  прозрачном  rich edit-
контроле.

[-]  Исправлена  ошибка  с  невозможностью  компиляции  асм-версии при
наличии символа USE_DROPDOWNCOUNT.

[*]  MCK  Свойство  FixFlatXP  для  тулбара  реализовано более дешёвым
средством,  не  требующим  включения  прозрачности: установкой пустого
обработчика  события  OnTBCustomDraw, введённым несколько ранее. Как и
прежде,  FixFlatXP  предназначено  для  устранения  черного  фона  при
включённым  темах  и подключённом манифесте, для "плоских" тулбаров (с
опцией tboFlat).

[-] В генераторе кода MCK исправлена опечатка MCKControls -> MCKCtrls.

[*] Существенно переработан компонент KOLPng:
-  добавлена  возможность  загрузки  1/8, 1/4 или 1/2 изображения, что
может   существенно   сократить   время   построения  мини-эскиза  для
interlaced-изображений  (для  не-interlaced  эффект  менее  заметен, и
некоторое   ускорение   обнаруживается   только   для   очень  больших
изображений, за счёт меньшего потребления памяти);
- выполнена оптимизация некоторых критичных участков, с использованием
ассемблера, в том числе MMX.


Vladimir Kladov   (2007-09-20 20:52:00) [21]

Я насчёт paeth-предиктора не совсем понял: имеется в виду что такой вариант быстрее чем на асме? Что-то сомневаюсь я. В любом случа, paeth большой погоды (обычно) не делает. Жаль, что его вообще придумали. Нормальные компрессоры на больших картинках его избегают.


Vladimir Kladov   (2007-09-20 20:38:00) [22]

У меня тулбар тоже прозрачный. Ждем пример. Прочее я поправил, но до завтра как нибудь доживем уже, пятница как никак.


Sapersky   (2007-09-20 19:29:00) [23]

Относительно переписывания на asm вообще и KOLPng в частности. Попробуйте вот такой вариант PaethPredictor/FilterRow:

function PaethPredictor(a, b, c: Integer): Integer;
var
 pa, pb, pc: Integer;
begin
 { a = left, b = above, c = upper left }
 pa := System.abs(b - c);      { distances to a, b, c }
 pb := System.abs(a - c);
 pc := System.abs(a + b - c * 2);

 { return nearest of a, b, c, breaking ties in order a, b, c }
 if (pa <= pb) and (pa <= pc) then
   Result := a
 else
   if pb <= pc then
     Result := b
   else
     Result := c;
end;

procedure TChunkIDAT.FilterRow;
var
 pp : Byte;
 Offs : Integer;
 Col : DWORD;
 p1, p2 : PByteArray;
begin
 {Test the filter}
 case Row_Buffer[RowUsed]^[0] of
   {No filtering for this line}
   FILTER_NONE: begin end;
   {AND 255 serves only to never let the result be larger than one byte}
   {Sub filter}
   FILTER_SUB: begin // cur = cur + left
     p1 := @Row_Buffer[RowUsed][Offset + 1];
     Offs := -Offset;
     FOR Col := Offset + 1 to Row_Bytes DO begin
       p1[0] := (p1[0] + p1[Offs]) and 255;
       Inc(PByte(p1));
     end;
   end;
   {Up filter}
   FILTER_UP: begin
     p1 := @Row_Buffer[RowUsed][1];
     p2 := @Row_Buffer[not RowUsed][1];
     FOR Col := 1 to Row_Bytes DO begin
       p1[0] := (p1[0] + p2[0]) and 255;
       Inc(PByte(p1)); Inc(PByte(p2));
     end;
   end;
   {Average filter}
   FILTER_AVERAGE: begin
     p1 := @Row_Buffer[RowUsed][1];
     p2 := @Row_Buffer[not RowUsed][1];
     For Col := 0 to Offset-1 do begin
       p1[0] := (p1[0] + p2[0] div 2) and 255;
       Inc(PByte(p1)); Inc(PByte(p2));
     end;
     Offs := -Offset;
     For Col := Offset to Row_Bytes-1 do begin
       p1[0] := (p1[0] + ( p1[Offs] + p2[0] ) div 2) and 255;
//      cur =    (cur +   ( left +     above) div 2) and 255;
       Inc(PByte(p1)); Inc(PByte(p2));
     end;
   end;
   {Paeth filter}
   FILTER_PAETH:
   begin
     {Initialize}
     p1 := @Row_Buffer[RowUsed][1];
     p2 := @Row_Buffer[not RowUsed][1];
     For Col := 0 to Offset-1 do begin
       pp := PaethPredictor(0, p2[0], 0);
       p1[0] := (pp + p1[0]) and 255;
       Inc(PByte(p1)); Inc(PByte(p2));
     end;
     Offs := -Offset;
     For Col := Offset to Row_Bytes-1 do begin
       pp := PaethPredictor(p1[Offs], // left
                            p2[0], // above
                            p2[Offs]); // above-left
       p1[0] := (pp + p1[0]) and 255;
       Inc(PByte(p1)); Inc(PByte(p2));
     end;
   end;

 end {case};
end;


exero   (2007-09-20 18:46:00) [24]

>Или замени в visual_xp_styles.inc...
Спасибо, именно так и поступлю.

> 3. Тулбар не прозрачен, если подключен манифест.
>А у меня прозрачен... Тем более, что я ничего по поводу ToolBar'а не >делал...
У меня был непрозрачен вне зависимости от GRAPHCTL_XPSTYLES. Завтра выложу тестовый проектик где это проявлялось - сейчас под рукой delphi нет.


MTsv DN   (2007-09-20 15:58:00) [25]

> Просмотрел... Используй пока edgeStyle := esTransparent
Или замени в visual_xp_styles.inc:
if Sender.fedgeStyle <> esTransparent then
на
if (Sender.fedgeStyle = esTransparent) or (Sender.fTransparent) then else


MTsv DN   (2007-09-20 15:52:00) [26]

Привет...

> 1. Не работает Transparent - если GRAPHCTL_XPSTYLES и подключен манифест (на форму кинул граш панель - на нее обычную панельку у нее Transparent = True).
Просмотрел... Используй пока edgeStyle := esTransparent

> 3. Тулбар не прозрачен, если подключен манифест.
А у меня прозрачен... Тем более, что я ничего по поводу ToolBar'а не делал...


mdw   (2007-09-20 12:59:00) [27]

PAS_VERSION
procedure ApplyImageLists2ListView( Sender: PControl );
...
 Sender.Style := Sender.Style and not $4FFC
                 or Flags or ListViewStyles[ Sender.fLVStyle ];
нужно поменять $4FFCна $403F, как и в ASM_VERSION:

 Sender.Style := Sender.Style and not $403F
                 or Flags or ListViewStyles[ Sender.fLVStyle ];

Иначе, при переключении LVStyle, с lvsList переключиться на другой нельзя.


mdw   (2007-09-20 12:36:00) [28]


> Так же  непонял в KOL.pas в

- не читать. Не заметил когда редактировал...:)


mdw   (2007-09-20 12:35:00) [29]

Владимир, вы поправили в:
Так же  непонял в KOL.pas в
{$ELSE newcode}
procedure ComboboxDropDown( Sender: PObj );
....
//DropDownCount := CB.DropDownCount;
DropDownCount := 8;
...
Но тогда теряется смысл использовать DropDownCount - по любому, всегда = 8. Может наоборот?:
...
DropDownCount := CB.DropDownCount;
//DropDownCount := 8;
..


exero   (2007-09-20 12:19:00) [30]

Кстати, все забываю отписать:
в KOLGrushControls.pas подправить функцию WndProcGRush:
.............
       WM_SETTEXT:
           begin
           PGRushControl(Ctl_).SetAllNeedUpdate;
---->>   Ctl_.Invalidate; <<-------------- Добавить эту строку
           end;


exeron   (2007-09-20 11:44:00) [31]

3. Тулбар не прозрачен, если подключен манифест.


exero   (2007-09-20 11:34:00) [32]

1. Не работает Transparent - если GRAPHCTL_XPSTYLES и подключен манифест (на форму кинул граш панель - на нее обычную панельку у нее Transparent = True).
2. Если решать проблему с прозрачным RichEdit'ом - то след каретки остается еще и в случае если ее положение менять с помощью клика мыши.


Jon   (2007-09-19 23:44:00) [33]

MCK v2.80 package ( http://kolmck.net/mck.zip) contains an old version of err.pas :o


homm   (2007-09-19 22:15:00) [34]

> [0] Vladimir Kladov ©   (19.09.07 20:13)
> [-]   По   совету   MTsvDN,  в  процедуре  WndProc_RichEdTransp_Update
> добавлена  обработка  сообщения  WM_CHAR

А вот это мое :)


homm   (2007-09-19 22:12:00) [35]

> [0] Vladimir Kladov ©   (19.09.07 20:13)
> [*] Процедура выравнивания контролов на форме по умолчанию
> выполняется
> новым  вариантом,  разработанным  Александром  Карпинским
> a.k.a. homm.

Владимир, вы что-то путаете :) Это не я.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо