Пользовательский фон значка MessageBox белый - PullRequest
0 голосов
/ 14 февраля 2011

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

try
   if not custb then
   case i of
      MB_ICONINFORMATION:ico.Handle := LoadIcon( 0, IDI_INFORMATION);
      MB_ICONEXCLAMATION:ico.Handle := LoadIcon( 0, IDI_EXCLAMATION);
      MB_ICONQUESTION:ico.Handle := LoadIcon( 0, IDI_QUESTION);
      MB_ICONERROR:ico.Handle := LoadIcon( 0, IDI_ERROR);
   end;

   with timage.Create( frm) do
   begin
      parent := frm;
      transparent := True;

      if custb then
      begin
       height := glyph.Height;
       width := Glyph.Width;
      end 
      else
      begin
       height := ico.Height;
       width := ico.Width;
      end;

      ih := height;
      top := Height div 2 + 2;
      it := Top;
      left := Width div 2 + 2;
      il := Left + width + width div 2;

      if width <= 16 then
      begin
       il := il + 16;
       left := left + 8;
      end;
      if height <= 16 then
      begin
       it := it + 8;
       top := top + 8;
      end;
      if custb then picture := Glyph else canvas.Draw( 0, 0, ico);
     end;
    finally
    end;
    if not custb then ico.Free;
   end

С наилучшими пожеланиями, evilone

Ответы [ 2 ]

3 голосов
/ 14 февраля 2011

Мой код для этой вещи выглядит так:

function StandardDialogIcon(DlgType: TMsgDlgType): PChar;
begin
  case DlgType of
  mtWarning:
    Result := IDI_WARNING;
  mtError:
    Result := IDI_ERROR;
  mtInformation:
    Result := IDI_INFORMATION;
  mtConfirmation:
    Result := IDI_QUESTION;
  else
    Result := nil;
  end;
end;

...

Image.Picture.Icon.Handle := LoadIcon(0, StandardDialogIcon(DlgType));

Нет необходимости устанавливать какие-либо свойства на Image, вы можете просто игнорировать Transparent.

0 голосов
/ 14 февраля 2011

Извлечение из интерактивной справки для TImage.Transparent:

Параметр Прозрачный устанавливает прозрачное свойство изображения.

Примечание. Прозрачный эффект не действует, если в свойстве Picture не указан объект TBitmap.

Для вас это означает две вещи:

  1. установить только прозрачное свойствопосле того, как изображение было присвоено
  2. Используйте TBitmap для своего изображения и присвойте thtat свойству изображения.

Посмотрите следующую ссылку, которая описывает функцию, которая преобразуетзначок в растровое изображение: Delph-Library: преобразовать значок в растровое изображение .

Выдержка:

// Konvertiert Ico zu Bitmap
procedure IcoToBmpA(Ico: TIcon; Bmp: TBitmap; SmallIcon: Boolean);
var
  WH: Byte; // Width and Height
begin
  with Bmp do begin
    Canvas.Brush.Color := clFuchsia;
    TransparentColor := clFuchsia;

    Width := 32; Height := 32;
    Canvas.Draw(0, 0, Ico);

    if SmallIcon then WH := 16 else WH := 32;
    Canvas.StretchDraw(Rect(0, 0, WH, WH), Bmp);
    Width := WH; Height := WH;

    Transparent :=  True;
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...