Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

EugeneBoss3



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

//-------------------------------------------- прорисовка текста с градиентом:
procedure DrawGradientText( Canvas : TCanvas;
                            iLeft,iTop : Integer;
                            const Text : String;
                            const ColorStart : TColor;
                            const ColorEnd : TColor;
                            const Gradient : TEkTextGradient = gtVertical);
var
  I,Steps   : Integer;
  GradRect, TextBounds : TRect;
  RedStart,GreenStart,BlueStart : Byte;
  RedEnd, GreenEnd, BlueEnd : Byte;
  Red, Green, Blue : Single;
  DifRed, DifGreen, DifBlue : Single;
  iTextWidth, iTextHeight : Integer;
  sTextNew: String;
begin
  sTextNew:= '';
  for I := 1 to Length(Text) do
  begin
    if not (Text[I]='&')
    then sTextNew:= sTextNew + Text[ I ] ;
  end;
 
  with Canvas do
  begin
    // размер текста:
    iTextWidth  := TextWidth (sTextNew);
    iTextHeight := TextHeight(sTextNew);
    if (iTextWidth=0) or (iTextHeight=0) then Exit;
 
    TextBounds := Rect( iLeft, iTop, iLeft + iTextWidth, iTop + iTextHeight);
 
    // Рисуем на прозрачном фоне
    Brush.Style := bsClear;
    // Определение цветов
    RedStart   := GetRValue(ColorStart);
    GreenStart := GetGValue(ColorStart);
    BlueStart  := GetBValue(ColorStart);
 
    RedEnd     := GetRValue(ColorEnd);
    GreenEnd   := GetGValue(ColorEnd);
    BlueEnd    := GetBValue(ColorEnd);
 
    Red        := RedStart;
    Green      := GreenStart;
    Blue       := BlueStart;
 
    if (Gradient = gtNone ) then
    begin
      SetTextColor( Handle, RGB( Trunc(Red), Trunc(Green), Trunc(Blue)) );
      Windows.TextOut( Handle, iLeft, iTop, PChar(sTextNew), Length(sTextNew));
      Exit;
    end;
 
    if (Gradient = gtHorizontal )
    then Steps:= iTextWidth
    else Steps:= iTextHeight ;
 
    DifRed   := ( RedEnd - RedStart)/Steps;
    DifGreen := ( GreenEnd - GreenStart)/Steps;
    DifBlue  := ( BlueEnd - BlueStart)/Steps;
 
    for I:=0 to Steps do
    begin
      SetTextColor( Handle, RGB( Trunc(Red), Trunc(Green), Trunc(Blue)) );
 
      if (Gradient = gtHorizontal ) then
      begin
        GradRect.Left   := TextBounds.Left+I;
        GradRect.Top    := TextBounds.Top;
        GradRect.Right  := GradRect.Left+1;
        GradRect.Bottom := TextBounds.Bottom
      end
      else begin
        GradRect.Left   := TextBounds.Left;
        GradRect.Top    := TextBounds.Top+I;
        GradRect.Right  := TextBounds.Right;
        GradRect.Bottom := GradRect.Top+1;
      end;
 
      Windows.ExtTextOut( Handle,
                          iLeft,
                          iTop,
                          ETO_CLIPPED,
                          @GradRect,
                          PChar(sTextNew),
                          Length(sTextNew), nil);
      Red   := Red   + DifRed;
      Green := Green + DifGreen;
      Blue  := Blue  + DifBlue;
    end;
  end;
end;

Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 03:14 11-06-2010
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru