Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

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

 
Vladimir Kladov   (2007-05-17 19:15) [0]

Новости от 17 мая 2007 (KOL & MCK v2.61)

[+] Добавлена функция: ExePath.

[*]   Еще   несколько   функций   переведено  на  ассемблер:  ShowMsg,
IncludeTrailingChar,   ExtractFileNameWOExt,  ReplaceExt,  GetTempDir,
CreateTempFile.

[-] UNI Некоторые изменения для UNICODE_CTRLS:
-  GetStartDir  (исправлен  передаваемый  системе  размер  буфера  для
строки);
-  конструкции,  подобные{$IFDEF  UNICODE_CTRLS}  MessageBoxW  {$ELSE}
MessageBoxA  {$ENDIF}  (  ...  устранены  где  это  возможно (т.к. они
объявлены соответствующим образом в KOL_Unicode.inc).

[-]  Исправлена  функция  RegKeyGetSubkeys  (последний  символ подкюча
обрезался).

[-] Метод TMenu.Destroy - исправлено Галковым.

[-]  Метод  TTimer.SetEnabled  (Pascal-версия)  исправлен,  чтобы    в
точности работал как asm-версия (таймер не включается, если переменная
Applet  еще  или  уже  равна  nil,  для случая, когда определен символ
TIMER_APPLETWND).

[-]  TBitmap.GetHandle:  добавлен  вызов  fDetachCanvas.  Когда Handle
требуется  для  передачи  в  некоторые  функции API, он не должен быть
присоединен ни к какому контексту DC, иначе фукнции могут не работать.
Этот вызов устраняет проблему.

[-]   Метод   TBitmap.LoadFromStreamEx   исправлен   для  изображений,
упакованных  RLE4  и  RLE8: память для DIB не была проинициализирована
(аналогичный  баг  наблюдается  в  стандартном Промотре в XP :) ). Для
большей скорости при работе с большими картинками инициализация памяти
делается только для RLE-упакованных битмапов.

[-]  !!!  Метод  TBitmap.Convert2Mask исправлен для форматов pf24bit и
pf32bit.   Вместе  с  небольшим  изменением  в  KOLGRushControls,  это
исправляет окончательно прозрачность для GrushCheckbox и GrushRadiobox
когда разрешение рабочего стола составляет 64K цветов.

[-]   TBitmap.CopyToClipboard:   предыдущее  исправления  для  формата
pf24bit  отменено  (требуется  исправление только для формата pf32bit,
тогда  как  для  pf24bit  это  приводит  к тому, что старые приложения
вообще отказываются получать картинку из буфера обмена).

[*] Изменения в KOLadd.ShowQuestionEx:
1.  Если  не  определять  символ NO_CHECK_STAYONTOP, то активная форма
проверяется  на  предмет  StayOnTop  и  если  да,  то  вопрос  так  же
появляется в режиме StayOnTop=true;
2. Если не определять символ NOT_ALLOW_EXTRACT_TITLE, то заголовок для
диалога извлекается из самого сообщения (начало сообщения должно иметь
вид "!titlestring!");

[*]  MCK  Изменения  в  MCK:  функция  RemoveSpaces  используется  для
проверки   сигнатуры   MCK   (для   устранения   различий,   внесенных
авто-форматирующим софтом).

[*] Lnk Изменения в Lnk.pas:

1.  Добавлена  функция  FileTypeReg2Ex, которая работает точно так же,
как  процедура FileTypeReg2, но при этом формирует и возвращает строку
с   протоколом   всех  изменений  в  реестре.  И  добавлена  процедура
FileTypeUnreg, которая может использовать такую строку для отката всех
изменений, сделанных функцией FileTypeReg2Ex;

2.  Изменена  функция  GetSystemFolder  -  всегда включает завершающий
слэш.

[*] GRush        Изменения в ToGRush.pas:
1.  Если  только  не объявлен символ TOGRUSH_NO_MESSAGEBOX, все вызовы
MessageBox   и   основанные  на  нем  (MsgBox,  ShowMessage,  ShowMsg)
перенаправляются  к  ShowQuestionEx  (которая  уже использует ToGRush,
если   определен   символ   USE_GRUSH),  так  что  сообщения  выглядят
"принадлежащими" приложению, а не системе;
2.  Если  только  не  объявлен  символ  TOGRUSH_NO_SCROLLBARS, фон для
контрола  типа  scrollbar  изменяется  (но  не  для  встроенных линеек
прокрутки некоторых окон, вроде мемо).


 
homm ©   (2007-05-17 20:06) [1]

> Вместе  с  небольшим  изменением  в  KOLGRushControls

Эти исправления тоже где-то выложены?


 
Vladimir Kladov   (2007-05-17 20:26) [2]

нет, но я отправил письмом. Не пришло еще наверное.


 
homm ©   (2007-05-17 20:44) [3]

   {$IFDEF NOT_IMMIDIATLYONLY}
{$IFNDEF FIX_16BITMODE}  //*****
   if UseDIB then  begin
       TBM := NewDIBBitmap(W, H, pf32bit);
       Bitmap.Draw(TBM.Canvas.Handle, 0, 0);
       Bitmap.Free;
       Bitmap := TBM;
   end;
{$ENDIF FIX_16BITMODE}   //*****
   {$ENDIF NOT_IMMIDIATLYONLY}
   Bitmap.RemoveCanvas;
   //Tag := Tag + 1;
end;


Тогда уж и так тоже (конец той-же процедуры).
Только это помоему должно по быстродействию ударить немного. Раньше фишка была, что большие поверхности для панелей хранились в видеопамяти, теперь этого не будет :(


 
D[u]fa ©   (2007-05-17 21:12) [4]

и как всегда не обновляется....


 
D[u]fa ©   (2007-05-17 21:14) [5]

хм.. а после того как стер старые *.old бекапы, все обновилось


 
D[u]fa ©   (2007-05-17 21:16) [6]

если добавлена функция ExePath то тогда ParamStr(0) отпдает


 
Vladimir Kladov   (2007-05-17 21:27) [7]

Это понятно, что по быстродействию хуже. Но ведь нужна прозрачность, а при столе 64К цветов не выходит. Можно ограничить "маленькими" контролами, типа label, checkbox и radiobox (меня собственно последние 2 и подвигли на это: как-то неприятно видеть, что они не хотят принять Transparent). Возможно, другое решение можно найти, если "подогнать" сразу цвет прозрачности, чтобы он не искажался форматом pf16bit. Т.е. отбросить младшие 3 бита у каналов R и B и 2 бита у G: color := color and $F8FCF8;


 
Vladimir Kladov   (2007-05-17 21:32) [8]

ParamStr(0) лучше не пользоваться. Что-то такое проскакивало, что при таком пути к экзешнику из командной строки, могут возникнуть неприятности, если он был запущен из текущей директории в FARе, например. При этом текущая директория для самого экзешника уже может отличаться. В общем, есть шанс заблудиться. GetModule.... как там дальше - более надежный способ. GetStartDir тоже использует этот способ.


 
homm ©   (2007-05-17 22:06) [9]

Преобразовать цвет в виндовый 16 бит обрезанием не получиться, иначе в 16 битах не было бы либо абсолютно черного $00 либо абсолютно белого $ff. Потому где-то я и нашел функцию, которая до сих пор в модуле лежит. Называеться AlignColorTo16Bit.

Как вариано предлагаю так сделать:

if UseDIB then
 Bitmap := NewDIBBitMap(W, H, pf32bit);
else
 Bitmap := NewBitMap(W, H);

а вот это вообше убрать тогда:
   {$IFDEF NOT_IMMIDIATLYONLY}
   if UseDIB then  begin
       TBM := NewDIBBitmap(W, H, pf32bit);
       Bitmap.Draw(TBM.Canvas.Handle, 0, 0);
       Bitmap.Free;
       Bitmap := TBM;
   end;
   {$ENDIF NOT_IMMIDIATLYONLY}

Вообще насколько помню, преобразование в DIB было в конце как раз потому, что иначе глючело, видимо исправили «наоборот»

а FIX_16BITMODE для этого лучше не использовать, она для другово (градиент в NT рисуеться лесенкой даже в 32 бит), используйте FIX_DRAWTRANSPARENT.


 
MTsv DN ©   (2007-05-18 08:28) [10]

> [-] UNI Некоторые изменения для UNICODE_CTRLS:
Версия 2.61, режим UNICODE. Сразу "посыпались" ошибки. Очень много, вот некоторые:

1. Функция DiskFreeSpace,
 GetVersionEx
   ( POSVersionInfoA( @ V )^ ); // bug in Windows.pas !

POSVersionInfoA -> POSVersionInfo

2. Функция
function ImageList_LoadBitmap(Instance: THandle; Bmp: PKOLChar;
 CX, Grow: Integer; Mask: TColorRef): HImageList; stdcall;
begin
 Result := ImageList_LoadImageA(Instance, Bmp, CX, Grow, Mask, IMAGE_BITMAP, 0);
end;

ImageList_LoadImageA -> ImageList_LoadImage

Ну и так далее...


 
MTsv DN ©   (2007-05-18 08:29) [11]

> ImageList_LoadImageA -> ImageList_LoadImage
Пардон... Заменить на
{$IFDEF UNICODE_CTRLS}ImageList_LoadImageW{$ELSE}ImageList_LoadImageA{$ENDIF}


 
MTsv DN ©   (2007-05-18 08:32) [12]

А также: procedure DrawFormattedText( Ctl: PControl; DC: HDC; var R: TRect; Flags: DWORD {EditCtl: Boolean} );
Windows.DrawText( DC, PKOLChar( Ctl.Caption ), Length( Ctl.Caption ), R,

DrawText -> {$IFDEF UNICODE_CTRLS}DrawTextW{$ELSE}DrawTextA{$ENDIF}

И чуть ниже:
   Windows.DrawText( DC, PKOLChar( Ctl.Caption ), Length( Ctl.Caption ), R, Fmt );


 
L`Autour ©   (2007-05-18 10:29) [13]

Еще в KOL_ASM.inc надо {$IFDEF UNICODE_CTRLS} поубирать:

       {$IFDEF UNICODE_CTRLS}
       CALL      MessageBoxW
       {$ELSE}
       CALL      MessageBox
       {$ENDIF}

       {$IFDEF UNICODE_CTRLS}
       CALL    SendMessageW
       {$ELSE}
       CALL    SendMessage
       {$ENDIF}

       {$IFDEF UNICODE_CTRLS}
       CALL     DefWindowProcW
       {$ELSE}
       CALL     DefWindowProc
       {$ENDIF}

       {$IFDEF UNICODE_CTRLS}
       CALL     Windows.SendMessageW
       {$ELSE}
       CALL     Windows.SendMessage
       {$ENDIF}


 
L`Autour ©   (2007-05-18 10:42) [14]

Еще неплохо бы перевести

function LVAdd( const aText: String; ImgIdx: Integer; State: TListViewItemState;
                    StateImgIdx, OverlayImgIdx: Integer; Data: DWORD ): Integer;
в
function LVAdd( const aText: KOLString; ImgIdx: Integer; State: TListViewItemState;
                    StateImgIdx, OverlayImgIdx: Integer; Data: DWORD ): Integer;


 
MTsv DN ©   (2007-05-18 11:35) [15]

И "в догонку" для НЕ-UNICODE. В KOL_ASM.INC каждая функция по одному разу...не помню где:
GetSaveFileNameA
GetOpenFileNameA
Shell_NotifyIconA

Во всех убрать "А"


 
Vladimir Kladov   (2007-05-18 14:51) [16]

Букву A в asm-verсии постирать забыл. 4 раза, сами поправьте (но обновление будет скоро, может и сегодня).

Еще по GRush-контролам: под NT4 не знаю с какой радости tree view (не прозрачное) положенное на GRushPanel не очищает полностью весь свой фон, область слева, где линии и кнопки +/-, остается залитой цветом родителя панели. Удалось поправить, подложив под tree view панель цвета clWindow - в KOLDirDlgEx (будет с обновлением).


 
homm ©   (2007-05-18 15:55) [17]

> Еще по GRush-контролам:

Не думаю что это «по GRush контроллам» :)
В кранем случае это по прозрачности, но граши то причем ? :)


 
Vladimir Kladov   (2007-05-18 19:37) [18]

Новости от 18 мая 2007 (KOL & MCK v2.62)

[-]    ASM    KOL_asm.inc:    исправлены   вызовы   Shell_NotifyIconA,
GetOpenFileNameA,  GetSaveFileNameA  (похоже,  что была положена не та
версия   файла,   и   в   нее   не  вошли  вчерашние  исправления  для
TBitmap.Convert2Mask, теперь исправляюсь).

[-]  MCK  Исправлена проблема с передвижением вверх контролов на самой
форме,  имеющих  AnchorBottom  =  true, при загрузке проекта MCK и при
изменении главного меню.

[-] UNI Метод LVAdd изменен (String -> KOLString).

[+] delphicommctrl.inc: объявлена константа TVM_SETLINECOLOR.

[*]  KOLDirDlgEx  исправлен  для  рисования  tree  view в NT4 в случае
GRush-стиля  (с  использованием  ToGRush).  А  именно: область линий к
узлам дерева затиралась предварительно фоном формы, вместо фона самого
Tree View.

[+] GRush Дополнения в ToGRush: добавлено опциональное перенаправление
для  NewGradientPanel  и NewGradientPanelEx в GRushPanel, с поддержкой
большинства  стилей заливки (но GRush-контролы заливаются качественнее
в случае рабочего стола 64K цветов).


 
MTsv DN ©   (2007-05-18 20:20) [19]

Обновление доступно на http://www.kolnmck.ru


 
Don ©   (2007-05-21 17:00) [20]

в версии 2.62 не исправлены вызовы ImageList_LoadImageA, Windows.DrawText и POSVersionInfoA.


 
MTsv DN ©   (2007-05-21 18:27) [21]

Угу... Я Владимиру уже скинул UPD-файл...



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

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.031 c
2-1194873045
allucard
2007-11-12 16:10
2007.12.09
Проблема с кодировкой


15-1194893092
Yegorchic
2007-11-12 21:44
2007.12.09
Конвертирование простых символов в html-коды и наоборот


15-1194719051
Washington
2007-11-10 21:24
2007.12.09
Автозапуск


2-1194962162
Malik
2007-11-13 16:56
2007.12.09
ShellAPI парадокс и ничего более??


11-1181038471
SergeR
2007-06-05 14:14
2007.12.09
Пожелания по сайту KOLnMCK.ru