Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мерцание изображения, по событию таймера мерцает картинка 
:(
    Опции темы
BlackStorm
Дата 5.5.2005, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.3.2005

Репутация: нет
Всего: нет



есть такая процедура,

Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
 s : string;
 n : integer;
 d : TDateTime;
begin
 d := Time ;
 s := FormatDateTime ('s',d) ;
 label1.Caption := s ;
 n := StrToInt (s) ;
 SecLabel.Caption := Sec[n]
end;


На форме лежит картинка и лабел, картинка выше лабела.

интервал таймера 1 секунда, Sec[n] это элемнт из массива констант,
возникающая проблема мерцание при присвоении нового каптиона лабелу он как бы выскакивает на поверхность и происходит мерцание.

вопрос можно ли этого избежать? И если можно то как?
заранее спасибо за помощь.

Это сообщение отредактировал(а) BlackStorm - 5.5.2005, 08:39
PM MAIL   Вверх
Dufe
Дата 5.5.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 23.3.2005

Репутация: нет
Всего: нет



Я бы использовал на канвасе картинки TextOut().
Необходимо сделать копию кусочка картинки, куда выводится текст. И перерисовывать его на канвас картинки(я полагаю Image1.Canvas.Draw()). Если мерцание останется, DoubleBuffered:=True;
PM MAIL WWW ICQ   Вверх
FireFly
Дата 6.5.2005, 13:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











{На форме картинка TImage с любым изображением (Image1.Picture) и таймер. Каждую секунду на фоне картинки выводится текст с количеством секунд}

Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
 end;

var
  Form1: TForm1;
  fon:tbitmap;
  RectSource,RectDest:Trect;
  LeftTextPos,TopTextPos,RightTextPos,BottomTextPos:word;

  const
// левая позиция текста в картинке
LeftShift:word=10;
//верхняя позиция текста в картинке
TopShift:word=10;
//шаблон выводимого текста
outstring:shortstring = 'Текущие секунды - ';
// название шрифта
TxtFontName:shortstring = 'Times New Roman';
//Размер шрифта
TxtFontSize: byte = 24;
//цвет текста
TxtFontColor: Tcolor=clYellow;
//интервал таймера в секундах
TimerInterval: byte = 1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
var
s : shortstring;
d : TDateTime;
begin
d := Time ;
s := FormatDateTime ('s',d) ;
SetBkMode(image1.Canvas.Handle,TRANSPARENT);
image1.canvas.copyrect(RectDest,fon.canvas,RectSource);
image1.canvas.textout(LeftTextPos,TopTextPos,outstring + s);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
x:byte;
begin
Fon:=tbitmap.create;
image1.canvas.Font.color:=TxtFontColor;
image1.canvas.font.size:=TxtFontSize;
image1.canvas.font.name:=TxtFontName;
Fon.canvas.Font.color:=image1.canvas.Font.color;
Fon.canvas.font.size:=image1.canvas.font.size;
Fon.canvas.font.name:=image1.canvas.font.name;
//x это ширина "секунд". От фонаря и с запасом :-)
x:=Fon.canvas.TextWidth('55')+4;
Fon.width:=Fon.canvas.TextWidth(outstring)+x;
Fon.height:=Fon.canvas.TextHeight(outstring);
LeftTextPos:=image1.left+LeftShift;
TopTextPos:=image1.top+TopShift;
RightTextPos:=LeftTextPos+Fon.width;
BottomTextPos:=TopTextPos+Fon.height;
RectSource:=rect(0,0,Fon.width,Fon.Height);
RectDest:=rect(LeftTextPos,TopTextPos,RightTextPos,BottomTextPos);
Fon.canvas.copyrect(RectSource,image1.canvas,RectDest);
Timer1.Interval:=1000*TimerInterval;
Timer1.Enabled:=true;
end;

end.


Это сообщение отредактировал(а) p0s0l - 9.5.2005, 16:18
  Вверх
drinkOut
Дата 8.5.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 10.2.2005
Где: мой стакан?

Репутация: нет
Всего: нет



Можно так же попробовать:
Код

Self.AlphaBlend := true;

--------------------
Жизнь жестока - когда у меня на руках все карты, она начинает играть в шахматы...www.certifications.ru - проверь себя
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0422 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.