![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Версия 2.80 [Delphi, KOL/MCK, Windows]
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.
Владимир, вы что-то путаете :) Это не я.