Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизПростой вопрос по переделке кода указанного в хелпе. Найти похожие ветки
← →
Феликс © (2004-04-02 22:35) [0]Здравствуйте, Мастера! В хелпе в описание lineto указывается пример:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
{ first call FillRect to paint the surface of the form.
this removes any previously drawn lines (and anything else!) }
Canvas.FillRect(ClientRect);
Canvas.MoveTo(0, 0);
Canvas.LineTo(X, Y);
end;
При использование данного примера закрашивается полностью форма в белый цвет и уже на ней чертиться линия. Вопрос в том как чертить линию не на белом фоне (который возникает при выполнении Canvas.FillRect(ClientRect);), а на фоне картинки (timage)?
Заранее благодарен.
← →
Девушка (2004-04-02 22:40) [1]Попробуй убрать Canvas.FillRect(ClientRect);
← →
Феликс © (2004-04-02 22:43) [2]Нет, это не поможет.
← →
Девушка (2004-04-02 22:47) [3]Подожди, дык ты старую линию не стираешь?
← →
Mihey © (2004-04-02 22:53) [4]На форме pbScreen от TPaintBox. Изображение загружается в память без TImage. Юзаю TPaintBox т.к. есть OnPaint. Мерцание убрано через DoubleBuffered.
unit mainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;
type
TmainForm = class(TForm)
pbScreen: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure pbScreenPaint(Sender: TObject);
procedure pbScreenMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
public
{ Public declarations }
end;
var
mainForm: TmainForm;
fon: TBitmap;
x0, y0: Integer;
implementation
{$R *.DFM}
procedure TmainForm.FormCreate(Sender: TObject);
begin
fon := TBitmap.Create;
fon.LoadFromFile("fon.bmp");
DoubleBuffered := True;
end;
procedure TmainForm.FormDestroy(Sender: TObject);
begin
fon.Free;
end;
procedure TmainForm.pbScreenPaint(Sender: TObject);
begin
BitBlt(pbScreen.Canvas.Handle, 0, 0, fon.Width, fon.Height,
fon.Canvas.Handle, 0, 0, SrcCopy);
pbScreen.Canvas.MoveTo(0, 0);
pbScreen.Canvas.LineTo(x0, y0);
end;
procedure TmainForm.pbScreenMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
x0 := X;
y0 := Y;
// pbScreen.Invalidate;
pbScreen.Repaint;
end;
end.
← →
Феликс © (2004-04-02 23:16) [5]
> Подожди, дык ты старую линию не стираешь?
Да вот же как раз и нет, но сейчас уже разобрался.
2 Mihey
Отличный способ. Спасибо! Разобрался.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c