Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наложение изображений [D7, WinXP]


Виталька2005 ©   (2005-09-21 12:33:00) 

Здравствуйте,  мастера.
Такая задача:
есть изображение, поверх которого необходимо
показывать/скрывать координатную сетку.
А при клике в определённом квадрате границы квадратика должны замигать.
Естественно, не хотелось бы видеть мерцания и т.п.
Подкиньте идей, как грамотней такое осуществить?


Дмитрий Белькевич   (2005-09-25 16:20:00) [1]

не факт. там много нюансов.


XProger   (2005-09-22 18:50:00) [2]

Чапаев, и не будет мерцать вообще, если Form1.DuobleBuffered := true;


Чапаев   (2005-09-22 13:16:00) [3]

Мерцать будет значитильно меньше, если Image.Transparent:=False;


Antonn   (2005-09-22 12:23:00) [4]

Виталька 2005   (22.09.05 10:57) [2]
ну, я имел в виду не кнопку, а процедуру, просто не правильно написал ее название(уже не первый раз:)):
BitBlt(Canvas.Handle,0,0,canvas.ClipRect.Right,canvas.ClipRect.Bottom,FOutBuffer.Canvas.Handle,0,0,SRCCOPY);

Если нужно просто сетку поверх картинки, то можно сделать так. Положить TImage(или что там используете) и поверх нее разместить PaintBox, подогнав под размеры первого. Далее добавить в обработчики PainBox следующее:

procedure TForm1.PaintBox1Paint(Sender: TObject);
const cx = 20;
     cy = 20;
var i:integer;
begin
with paintbox1.Canvas do begin
   brush.Style:=bsclear;
   pen.Color:=clblack;
   fillrect(paintbox1.ClientRect);

 for i:=0 to (paintbox1.Width div cx) do begin
 moveto(i*cx,0);lineto(i*cx,paintbox1.Height); end;

 for i:=0 to (paintbox1.Height div cy) do begin
 moveto(0,i*cy); lineto(paintbox1.Width,i*cy); end;
   pen.Color:=clyellow;

 rectangle((paintbox1.Tag - (paintbox1.Width div cx)*(paintbox1.Tag div (paintbox1.Width div cx)))*cx  ,(paintbox1.Tag div (paintbox1.Width div cx))*cy, (paintbox1.Tag+1 - (paintbox1.Width div cx)*(paintbox1.Tag div (paintbox1.Width div cx)))*cx+1, (((paintbox1.Tag) div (paintbox1.Width div cx))+1)*cy+1);
end;
end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const cx = 20;
     cy = 20;
begin
 paintbox1.Tag:=(paintbox1.Width div cx)*((y div cy))+(x div cx);
 paintbox1.repaint;
end;


Но это будет мерцать, если не установить doublebuffered:=true у контрола, на котором лежит Timage(и Painbox).
Если не используется XPManifest, то можно для формы, в OnCreate формы вставить doublebuffered:=true


Виталька 2005   (2005-09-22 10:57:00) [5]

Эм.. Antonn, можно поподробнее. bitbtn - это же кнопка.
Причём она здесь?=)

а может просто два TImage наложить, и в верхний гиф загружать?


Antonn   (2005-09-21 14:51:00) [6]

Виталька2005   (21.09.05 12:33)
рисовать на TBitmap в памяти и выводить одним махом через bitbtn


Наверх

Титульная страница Поиск, карта сайта Написать письмо