Форум: "Media";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизНаложение изображений Найти похожие ветки
← →
Виталька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 вся ветка
Форум: "Media";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c