Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Наше Open Source Software

Наше Open Source Software Наработки для использования в Ваших проектах

Ответ
 
Опции темы
Старый 08.01.2012, 20:05   #1
ProgrammerForever
AnyKey`щик
 
Аватар для ProgrammerForever
 
Регистрация: 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.
Пользуйтесь с удовольствием!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 13:51.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com