Текущий архив: 2007.06.24;
Скачать: CL | DM;
Вниз
BitBtn.Enabled := False Найти похожие ветки
← →
MTsv DN © (2006-11-03 19:19) [0]Есть BitBtn, на ней естесссно рисунок... При установке BitBtn.Enabled := False
, кнопка отключается, это понятно, но по идее рисунок надо конвертировать в оттенки серого... Отсюда вопрос, как это сделать...
← →
GMax (2006-11-03 23:16) [1]по идее надо как в VCL, но проще заранее подготовить конвертированный рисунок.
← →
MTsv DN © (2006-11-03 23:48) [2]Ну-у-у, это понятно... Можно, конечно, сделать еще один ImageList (а мне в проекте надо будет сделать 8), но может быть есть какое-нибудь более конструктивное и, главное, универсальное средство?..
Кстати, а что значит "как в VCL"?..
← →
Vladimir Kladov (2006-11-04 11:11) [3]В случае «рисованной» кнопки (bitbtn) может использоваться либо отдельный рисунок, либо изображение из списка изображений (imagelist). И в любом из этих случаев, может предоставляться до 5 «глифов» – по одному для каждого из состояний: нормального, нажатого, запрещенного, фокусного, и подсвеченного. В случае отдельного изображения глифы располагаются в рисунке по горизонтали, и количество предоставленных глифов определяется исходя из размера рисунка (предполагая, что все изображения квадратные). В случае списка изображений сами глифы должны занимать в списке последовательные индексные позиции, а количество предоставленных глифов задается отдельно. При прямом создании кнопки со списком изображений в Run-time количество глифов передается в старшем слове параметра GlyphCount (младшее слово в этом случае используется для передачи стартового индекса набора глифов для кнопки в списке изображений). При настройке такой кнопки в MCK для этого имеется особое псевдо-свойство только для времени разработки: glyphCount.
Да порядок глифов изначально был непродуман. Я собираюсь это изменить с 2.42. Оставить опцию BITBTN_DISABLEDGLYPH2 для совместимости с прежними версиями, если комк-то неудобно переставлять глифки в image-list"ах и битмапках. Новый порядок: нормальное, недоступное, нажатое, фокусное, активное. Перставляются недоступное и нажатое. Если есть предложения по порядку, напишите.
Система _якобы_ умеет автоматически продуцировать загрееное изображение из нормального. Но делает это так, что почти в 90% случаев лучше это сделать самому, подготовив все глифы заранее, и для bitbtn, и для toolbar.
← →
MTsv DN © (2006-11-04 15:46) [4]В общем, как я понял, все равно нужен еще рисунок... Ну что ж... Вот вариант с использование одной картинки. Есть условия использования, но для моих нужд (а может это и еще кому поможет ;-) ), самое то:
function TfrmMain.BitnBtnBitBtnDraw(Sender: PControl;
BtnState: Integer): Boolean;
procedure ConvertBitmap2Grayscale(const Bmp: PBitmap);
type
TRGBArray = array[0..32767] of TRGBTriple;
PRGBArray = ^TRGBArray;
var
x, y, Gray: Integer;
Row: PRGBArray;
begin
Bmp.PixelFormat := pf24Bit;
for y := 0 to Bmp.Height - 1 do
begin
Row := Bmp.ScanLine[y];
for x := 0 to Bmp.Width - 1 do
begin
Gray := (Row[x].rgbtRed + Row[x].rgbtGreen + Row[x].rgbtBlue) div 3;
Row[x].rgbtRed := Gray;
Row[x].rgbtGreen := Gray;
Row[x].rgbtBlue := Gray;
end;
end;
end;
var
G : PBitmap;
DC : HDC;
Size, TransColor : Integer;
begin
DC := GetDC(Sender.Handle);
Size := 32;
G := NewDIBBitmap(Size, Size, pf24bit);
G.LoadFromResourceName(hInstance, PKOLChar(Sender.Name));
TransColor := G.Pixels[0,0];
if not Sender.Enabled then ConvertBitmap2Grayscale( G );
G.DrawTransparent(DC, 5, 5, TransColor);
ReleaseDC(Sender.Handle, DC);
G.Free;
end;
Условия:
1. Имя BITMAP-ресурса = имени BitBtn. В BITMAP-ресурсе только одно изображение. Res-файл создавал вручную...
2. Как следствие надо использовать USE_NAMES.
При соблюдении этих условий одной функции будет достаточно, для всех BitBtn...
← →
Vladimyr © (2006-11-08 10:55) [5]
Gray := (Row[x].rgbtRed + Row[x].rgbtGreen + Row[x].rgbtBlue) div 3;
Row[x].rgbtRed := Gray;
Row[x].rgbtGreen := Gray;
Row[x].rgbtBlue := Gray;
Всё это, конечно, хорошо, однако нормальное загрееное изображение как бы "вдавлено" (содержит тень), а не просто является чёрно-белым вариантом исходного...
← →
MTsv DN © (2006-11-08 12:16) [6]Я и не настаиваю... Я привел пример, как "ушел" от необходимости использовать 2а глифа... "На безрыбье, и рак - рыба..." (Народная Мудрость)... Меня такой вариант очень даже устраивает... Очень рад, если еще кому помог...
P.S. Кстати, возьмите и дорисуйте Тень (Shadow), Чеканку (Emboss)...да, что Вашей душе угодно... Благо алгоритмов в Нете...полно...
← →
GMax (2006-11-08 21:26) [7]я имел ввиду примерно то же - генерацию серого глифа из обычного.
но VCL это делает по-другому.
он подгоняет цвета к clBtnFace, получается куда длиннее, но подходит к любой палитре.
Buttons.pas - function TButtonGlyph.CreateButtonGlyph(State: TButtonState)
Страницы: 1 вся ветка
Текущий архив: 2007.06.24;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.014 c