powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Иконка компонента в 11 - розовый / серый прямоугольник
10 сообщений из 10, страница 1 из 1
Иконка компонента в 11 - розовый / серый прямоугольник
    #40131922
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть очень старая (но тем не менее палезная библиотека).
С исходниками.
Проект умер.

В 11 версии иконки не отображаются совсем (иногда розовый прямоугольник).
Решил подправить.
Не получается.
Дошел до того, что скопировал с библиотеки родной (FireDac) иконку. Один хер.

Русырсы bpl даже напрямую правил - тоже ноль эффекта.

Чего оНа хочет эта 11?
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40131925
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
иконка в формате res
забыл уточнить
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40131929
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40131930
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Если иконки нет совсем - библиотека манипулирует ImageList вручную (ImageList.Add) вместо вызова API (.AddMasked / .AddActionMenu).
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40131935
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О чем говорится по ссылке?

А у меня же есть иконка, как вроде.
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40132035
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
теперь у меня ситуация немного иная - иконка нормальная.
но показывается она пустышкой, пока я на нее не нажму.
при добавлении на фому отрисовывается.
после перезапуска среды - тоже самое.

спасибо.
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40132062
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzums
теперь у меня ситуация немного иная - иконка нормальная.
но показывается она пустышкой, пока я на нее не нажму.

Ошибка в 17 строке
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40132085
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кому еще интересно, проблема наблюдается только на Windows 11 IoT
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40132089
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bzums
О чем говорится по ссылке?


RSP-36484 Regression INTAServices.AddMasked is bugged

You can quickly test this by installing JCL (JEDI code library). GetIt version should work too.

Alternatively, you can call INTAServices.AddMasked to add masked bitmap to a list. Create IDE's menu item with returned index. The effect is the same for the INTAServices.AddActionMenu.

The INTAServices.AddMasked method no longer works.

Previous Delphi versions use TImageList as INTAServices.ImageList. Those versions do not have any issues, the icons are drawn correctly: the transparent/mask color is respected.

However, 11 Alexandria replaces INTAServices.ImageList with TVirtualImageList. Old code will no longer work correctly: the transparent/mask color is ignored; or it is not ignored, but the list itself draws incorrectly.

See attached screenshots.

A possible workaround is to add a (wrong) item first, and then manipulate the underlying TVirtualImageList directly to replace (wrong) image with a correct one:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
var
  Services: INTAServices;
  ItemBmp: TBitmap;
  BkColor: TColor;
  ID: String;
  
  ItemIndex: Integer;
  Item: TImageCollectionItem;
  Source: TImageCollectionSourceItem;
  Icon: TIcon;
  Stream: TMemoryStream;
 
// ...
 
MenuItem.ImageIndex := Services.AddMasked(ItemBmp, BkColor, ID);
 
if (MenuItem.ImageIndex >= 0) and
   (Services.ImageList is TVirtualImageList) and
   (TVirtualImageList(Services.ImageList).ImageCollection is TImageCollection) then
begin
  ItemIndex := TVirtualImageList(Services.ImageList).Images[MenuItem.ImageIndex].CollectionIndex;
  Item := TImageCollection(TVirtualImageList(Services.ImageList).ImageCollection).Images[ItemIndex];
 
  if Item.SourceImages.Count = 1 then
    Source := Item.SourceImages[0]
  else
  begin
    Item.SourceImages.Clear;
    Source := Item.SourceImages.Add;
  end;
 
  Icon := ConvertBitmapToIcon(ItemBmp, BkColor);
  try
    Stream := TMemoryStream.Create;
    try
      Icon.SaveToStream(Stream);
      Stream.Position := 0;
      Source.Image.LoadFromStream(Stream);
    finally
      FreeAndNil(Stream);
    end;
  finally
    FreeAndNil(Icon);
  end;
 
  TVirtualImageList(Services.ImageList).UpdateImageList;
end;



The ConvertBitmapToIcon function is (it could be better!):
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
function ConvertBitmapToIcon(const ABitmap: TBitmap; const ATransparentColor: TColor): TIcon;
var
  II: TIconInfo;
  Mask: TBitmap;
  X, Y: Integer;
begin
  Result := TIcon.Create;
  try
    Mask := TBitmap.Create(ABitmap.Width, ABitmap.Height);
    try
      Mask.Canvas.Brush.Color := clBlack;
      Mask.Canvas.FillRect(Rect(0, 0, Mask.Width, Mask.Height));
      for Y := 0 to Mask.Height - 1 do
        for X := 0 to Mask.Width - 1 do
          if ABitmap.Canvas.Pixels[X, Y] = ATransparentColor then
            Mask.Canvas.Pixels[X, Y] := clWhite;
 
      FillChar(II, SizeOf(II), 0);
      II.fIcon := True;
      II.hbmMask := Mask.Handle;
      II.hbmColor := ABitmap.Handle;
      Result.Handle := CreateIconIndirect(II);
    finally
      FreeAndNil(Mask);
    end;
  except
    FreeAndNil(Result);
    raise;
  end;
end;
...
Рейтинг: 0 / 0
Иконка компонента в 11 - розовый / серый прямоугольник
    #40132090
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Розовые прямоугольники получаются, если код манирулирует ImageList напрямую.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Иконка компонента в 11 - розовый / серый прямоугольник
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]