AnyKey`щик
Регистрация: 08.01.2012
Адрес: Новосибирск
Сообщений: 8
Написано 3 полезных сообщений (для 4 пользователей)
|
Процедура рисования кнопки с надписью
Добрый день.
Выкладываю процедуру для рисования "кнопки". Процедура довольно универсальна, текст располагается точно по центру кнопки. При прорисовке большого числа кнопок не рекомндую последним параметром ставить true, иначе будет неприятный эффект мерцания.
procedure DrawButton(strText:string;intLeft,intTop,intWidth,intHeight,intBackColorR,intBackColorG,intBackColorB,intTextColorR,intTextColorG,intTextColorB:integer;isFill,isRound:boolean;intArcWidth, intArcHeight:integer;isRepaint:boolean);
var
TextHeight, TextWidth: integer; {Размеры текста}
begin
{Процедура рисования кнопки с надписью}
{ ProgrammerForever (c) 2012 }
{ strText - надпись на кнопке}
{ intLeft - расстояние от левого края экрана до левого края кнопки. Фактически - X-координата левой верхней точки}
{ intTop - расстояние от верхнего края экрана до верхнего края кнопки. Фактически - Y-координата левой верхней точки}
{ intWidth - Ширина кнопки}
{ intHeight - Высота кнопки}
{ intBackColorR - Красная компонета цвета фона кнопки}
{ intBackColorG - Зелёная компонета цвета фона кнопки}
{ intBackColorB - Синяя компонета цвета фона кнопки}
{ intTextColorR - Красная компонета цвета текста кнопки}
{ intTextColorG - Зелёная компонета цвета текста кнопки}
{ intTextColorB - Синяя компонета цвета текста кнопки}
{ isFill - True = кнопка закрашена}
{ isRound - True = кнопка со скруглёнными краями}
{ intArcWidth - Радиус кривизны по оси Х}
{ intArcHeight - Радиус кривизны по оси Y}
{ isRepaint - True = требуется перерисовка}
{ Автор - Боев Григорий }
SetColor(intBackColorR,intBackColorG,intBackColorB); {Устанавливаем цвет}
if (isFill) then
begin
if (isRound) then
begin
fillRoundRect(intLeft,intTop,intWidth,intHeight,intArcWidth,intArcHeight); {Рисуем кнопку}
end
else
begin
fillRect(intLeft,intTop,intWidth,intHeight); {Рисуем кнопку}
end;
end
else
begin
if (isRound) then
begin
DrawRoundRect(intLeft,intTop,intWidth,intHeight,intArcWidth,intArcHeight); {Рисуем кнопку}
end
else
begin
DrawRect(intLeft,intTop,intWidth,intHeight); {Рисуем кнопку}
end;
end;
TextHeight := getStringHeight(strText);
TextWidth := getStringWidth(strText);
SetColor(intTextColorR,intTextColorG,intTextColorB); {Устанавливаем цвет текста}
drawText(strText, intLeft+(intWidth - TextWidth)/2, intTop+(intHeight-TextHeight)/2); {Пишем текст в центре кнопки}
if isRepaint then repaint; {Обновляем экран, если необходимо}
end;
Пример использования:
program ButtonDemo;
var
maxX,maxY,IntPersBottomSpice,intPersCopyright,intButtonWidth,intButtonHeight:integer;
procedure DrawButton(strText:string;intLeft,intTop,intWidth,intHeight,intBackColorR,intBackColorG,intBackColorB,intTextColorR,intTextColorG,intTextColorB:integer;isFill,isRound:boolean;intArcWidth, intArcHeight:integer;isRepaint:boolean);
var
TextHeight, TextWidth: integer; {Размеры текста}
begin
{Процедура рисования кнопки с надписью}
{ ProgrammerForever (c) 2012 }
{ strText - надпись на кнопке}
{ intLeft - расстояние от левого края экрана до левого края кнопки. Фактически - X-координата левой верхней точки}
{ intTop - расстояние от верхнего края экрана до верхнего края кнопки. Фактически - Y-координата левой верхней точки}
{ intWidth - Ширина кнопки}
{ intHeight - Высота кнопки}
{ intBackColorR - Красная компонета цвета фона кнопки}
{ intBackColorG - Зелёная компонета цвета фона кнопки}
{ intBackColorB - Синяя компонета цвета фона кнопки}
{ intTextColorR - Красная компонета цвета текста кнопки}
{ intTextColorG - Зелёная компонета цвета текста кнопки}
{ intTextColorB - Синяя компонета цвета текста кнопки}
{ isFill - True = кнопка закрашена}
{ isRound - True = кнопка со скруглёнными краями}
{ intArcWidth - Радиус кривизны по оси Х}
{ intArcHeight - Радиус кривизны по оси Y}
{ isRepaint - True = требуется перерисовка}
{ Автор - Боев Григорий }
SetColor(intBackColorR,intBackColorG,intBackColorB); {Устанавливаем цвет}
if (isFill) then
begin
if (isRound) then
begin
fillRoundRect(intLeft,intTop,intWidth,intHeight,intArcWidth,intArcHeight); {Рисуем кнопку}
end
else
begin
fillRect(intLeft,intTop,intWidth,intHeight); {Рисуем кнопку}
end;
end
else
begin
if (isRound) then
begin
DrawRoundRect(intLeft,intTop,intWidth,intHeight,intArcWidth,intArcHeight); {Рисуем кнопку}
end
else
begin
DrawRect(intLeft,intTop,intWidth,intHeight); {Рисуем кнопку}
end;
end;
TextHeight := getStringHeight(strText);
TextWidth := getStringWidth(strText);
SetColor(intTextColorR,intTextColorG,intTextColorB); {Устанавливаем цвет текста}
drawText(strText, intLeft+(intWidth - TextWidth)/2, intTop+(intHeight-TextHeight)/2); {Пишем текст в центре кнопки}
if isRepaint then repaint; {Обновляем экран, если необходимо}
end;
begin
maxX := getwidth; {Получаем размеры экрана}
maxY := getheight; {Получаем размеры экрана}
IntPersBottomSpice:=25; {Задаётся в %}
intPersCopyright:=25; {Задаётся в %}
intButtonWidth:=(maxX*(100-2*IntPersBottomSpice)/100);
intButtonHeight:=MaxY*intPersCopyright/100;
DrawButton('Demo',MaxX*IntPersBottomSpice/100,(MaxY-intButtonHeight)/2,intButtonWidth,intButtonHeight,64,0,0,255-64,255-0,255-0,true,true,5,5,true);
repeat until (getKeyPressed <> KE_NONE); {Ждём нажатие клавиши}
end.
Пользуйтесь с удовольствием!
|