Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Наложение изображений   Найти похожие ветки 

 
Виталька2005   (2005-09-21 12:33) [0]

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


 
Antonn ©   (2005-09-21 14:51) [1]

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


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

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

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


 
Antonn ©   (2005-09-22 12:23) [3]

Виталька 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-09-22 13:16) [4]

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


 
XProger ©   (2005-09-22 18:50) [5]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.047 c
10-1114329246
w_h_i_t_e
2005-04-24 11:54
2006.03.05
Сервер и клиент, передача файла.


15-1139810310
PARUS
2006-02-13 08:58
2006.03.05
Com


1-1138805220
voron70@yandex.ru
2006-02-01 17:47
2006.03.05
Нужна помощь в переводе с СИ на Delphi


10-1115098982
zafar
2005-05-03 09:43
2006.03.05
Помогите с OLE !!!!


2-1139992967
MIXER
2006-02-15 11:42
2006.03.05
печать формы