![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Наложение изображений [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