1. Pascal / Говнокод #9315

    +91

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    if IsThemeActive then
    begin
      ThemePartName := 'TAB';
      ThemeHandle := OpenThemeData(TabSheetQA.Handle, PWideChar(ThemePartName));
      if ThemeHandle <> 0 then
      begin
        ImageClipRect := ImageForBkColorRecalc.ClientRect;
        DrawThemeBackground(ThemeHandle, ImageForBkColorRecalc.Canvas.Handle,
          TABP_BODY, 0, ImageForBkColorRecalc.ClientRect, @ImageClipRect);
        BkColor := ImageForBkColorRecalc.Canvas.Pixels[0, 0];
      end;
      Exit;
    end;

    Надыбано в компоненте Delphi. Код получает начальный цвет градиента панелей Таб-контрола при включенных стилях XP и Aero. Для этого рисует на скрытом TImage его небольшой фрагмент и выдирает угловой пиксель.

    Запостил: Durik, 03 Февраля 2012

    Комментарии (6) RSS

    • Уже слышно, как заворочался и зачесался дедя Коля Вирт
      Ответить
    • Нормальный код, логика индусская, которая не вся в пасту попала, кстати (строка 12)
      Ответить
    • а как еще цвет еще выдрать мона?
      Ответить
      • была похожая задача, делал примерно тоже, если цвет выдергивается при инициализации или при смене темы то не такой это и говнокод, другое дело если бы это вызывалось гденибудь в OnPaint.
        Ответить
    • http://embarcadero.newsgroups.archived.at/public.delphi.language.delphi.win32/200905/0905163673.html в тему. Популярный способ..
      Ответить
    • https://groups.google.com/forum/?hl=en#!topic/borland.public.delphi.rtl.win32/it4ImUXqf0Q - ещё одно место, где рыпнулись в правильном направлении, но не дошли и скатились в представленное здесь решение %)
      Ответить

    Добавить комментарий