Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Плавные титры в Delphi (на подобии About на qip)

1.9K
05 августа 2011 года
Cool Xacker
148 / / 06.06.2006
Всем здрасти!!!
Хотел сделать плавные титры (в разделе о программе - подобное как в любим qip).
Искал во всём инете, нашёл пример только на С++ (немного разбираюсь), но при переводе на синтаксис Delphi выдаёт ошибки.

Вот код на С++:

 
Код:
HDC dc;
RECT r;
int in = 220;
//220 - это есть высота канвы. Текст прокручивается в данном примере снизу вверхъ

Код:
in--;
String s = String("здесь идет очень-очень большой текст... См пример в аттаче.";
r.left = 10;
r.top = in;
r.right = 190;                  
r.bottom = 220;
SetTextColor(ima->Canvas->Handle, 0xff00ff);
//установили цвет выводимого текста
DrawText( ima->Canvas->Handle,
          s.c_str(), s.Length(),
          &r,
          DT_WORDBREAK);
if (in<-210)//как только весь текст прокручен - начинаем заново прокрутку. Это подгоняется опытным путем
   in = 220;


Дошёл до Settextcolor и всё, начинает ругаться :confused:
1.9K
07 августа 2011 года
Cool Xacker
148 / / 06.06.2006
ну что никто не знает как сделать плавные титры в программе с помощью Delphi???
помогите тогда перевести код с++ на синтаксис delphi, плиз!!!
416
08 августа 2011 года
MaitreDesir
380 / / 02.01.2008
 
Код:
TForm1=class(TForm)
..................
private
  pos: integer;
  R: TRect;
  S: String;
................


Код:
procedure TForm1.FormShow(Sender: TObject);
begin
  pos:=220;
  Self.DoubleBuffered:=true;
  Timer1.Interval:=10;
  S:='ААААААААААААААААААААА'#10#13'ААААААААААААААААА'#10#13'АААААААААААААААААААА'#10#13'ААААААААААААААА'+
     'ФФФФФФФФФФФФФФФФ'#10#13'ФФФФФФФФФФФФФФФФ'#10#13'ФФФФФФФФФФФФФФФФФФФФФФ'#10#13'ФФФФФФФФФФФФФФФФФФФ'+
     'ИИИИИИИИИИИИГ'#10#13'ГГГГГГГГГГГГ'#10#13'ЕЕЕЕЕЕЕЕЕЕЕННННН'#10#13'НННННННННННООООО'#10#13'ОООООООООООООООО'+
     'ДДДДДДДДДДДД'#10#13'ДДДДДД'#10#13'ДДДДДЛЛЛЛЛЛЛЛЛЛЛ'#10#13'ЛЛЛЛЛЛЛЛИИИИИИИИИ'#10#13'ИИИИИИИИННННН'#10#13'ННННННННН'+
     'ЫЫЫЫЫЫЫЫЫЫЫЫ'#10#13'ЫЫЫЫЙЙЙЙЙЙЙЙЙЙЙ'#10#13'ЙЙЙЙЙЙЙЙЙЙЙЙЙЙ                 ТТТТТТТТТТТТТТТ';
end;


Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  dec(pos);
  r.left:=10;
  r.top:=pos;
  r.Right:=190;
  r.Bottom:=220;
  SetTextColor(Canvas.Handle,$ff00ff);
  DrawText(Canvas.Handle,pchar(s),length(s),r,DT_WORDBREAK);
  if pos<-410 then
    pos:=220;
end;
1.9K
08 августа 2011 года
Cool Xacker
148 / / 06.06.2006
спасибо, получилось - я не так, оказывается, делал =)
а в memo или richedit подобное можно сделать?
416
09 августа 2011 года
MaitreDesir
380 / / 02.01.2008
В мемо или ричедит.... Можно, там же Canvas есть.
1.9K
09 августа 2011 года
Cool Xacker
148 / / 06.06.2006
спасибо большое, вроде разобрался, вот код (если кому нужен будет):

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var text_dc:hdc;
Canvas:TCanvas;
begin
dec(pos);
  r.left:=10;
  r.top:=pos;
  r.Right:=190;
  r.Bottom:=200;
  canvas:=tcanvas.Create;
  text_dc:=getdc(memo1.Handle);
  canvas.Handle:=text_dc;
  SetTextColor(Canvas.Handle,$000000);
  DrawText(Canvas.Handle,pchar(s),length(s),r,DT_WORDBREAK);
  if pos<-410 then pos:=220;
end;
1.9K
09 августа 2011 года
Cool Xacker
148 / / 06.06.2006
тут же возник ещё вопрос - цвет шрифта мы поставили с помощью SetTextColor, а вот чтобы одна строка была одним цветом, а другая была другим и при этом выделена жирным???
416
09 августа 2011 года
MaitreDesir
380 / / 02.01.2008
Ну... на первый взгляд с цветом так:
 
Код:
1. Расчитываем высоту строки символов (есть функция API, не помню какая. Можно в канве взять Canvas.TextHeight('Mq'), будет макс. возможная высота строки).
2. Расчитываем Rect для первой строки (аналогично тому, как и расчитывал для всего текста)
3. Цикл по строкам, пока не кончатся
  3.1. Устанавливаем цвет для строки
  3.2. Выводим в Rect строку
  3.3. Смещаем Rect вниз на высоту одной строки+промежуток между строками

С жирным думаю тот же принцип: вместе с цветом устанавливаешь параметры шрифта. Только надо будет учитывать, что "жирность" может менять и ширину, и высоту строки. Если строки по количеству букв/слов фиксированные (или не важно, влезет или нет, то бишь нет автопереносов) - то и ладно, просто на каждом шаге пересчитываем высоту строки (и то, если она будет от жирности меняться - по идее не должна, но кто его знает, может еще и от шрифта зависит).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог