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

Вниз

Простой вопрос по переделке кода указанного в хелпе.   Найти похожие ветки 

 
Феликс ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
3-1079272168
BAYES
2004-03-14 16:49
2004.04.18
MSAccess


1-1080798454
MaD
2004-04-01 09:47
2004.04.18
Отображение ДОС текскта в RichEdit в Win2000


1-1080578017
tytus
2004-03-29 20:33
2004.04.18
Модальная форма из DLL.


3-1079711344
ВИКТОР
2004-03-19 18:49
2004.04.18
Таьлица в памяти


1-1080803620
ivc_andr
2004-04-01 11:13
2004.04.18
список в комбобоксе