Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизTimage Найти похожие ветки
← →
mahab © (2007-04-16 18:13) [0]Здравствуйте мастера! Двигаю мышью по форме Timage - мерцает. Как бы этот момент поправить?
← →
Kolan © (2007-04-16 18:13) [1]> [0] mahab © (16.04.07 18:13)
> Здравствуйте мастера! Двигаю мышью по форме Timage — мерцает.
> Как бы этот момент поправить?
DoubleBuffered := True;
?
← →
mahab © (2007-04-16 18:27) [2]Прошу пояснить. При установке этого свойства на форме остается след от рисунка.
← →
Kolan © (2007-04-16 18:29) [3]У картинки установи.
← →
mahab © (2007-04-16 18:50) [4]После установки у картинки свойства, при завершении программы выдается ошибка доступа. Я правильно установил свойство TWincontrol(Image1).DoubleBuffered:=true; ?
← →
Kolan © (2007-04-16 18:59) [5]Не неправильно. Я думал у TImage оно есть.
Так значит просто водите мышкой а Timage мигает?
Или вы таскаете сам Image.
Если последнее покажите код как таскаете…
← →
mahab © (2007-04-16 19:08) [6]Таскаю сам компонент. Может отловить paint но как? Tgraphiccontrol в диспетчеризации WM_PAINT не учавствуют.
procedure TForm1.FormCreate(Sender: TObject); //Классика
begin
move:=false;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button<>mbleft then exit;
move:=true;
x0:=x;y0:=y;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move=false then exit;
Image1.Left:=Image1.Left+X - X0 ;
Image1.Top:=Image1.Top+Y - Y0 ;
X0 := X;
Y0 := Y;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
move:=false;
end;
← →
Kolan © (2007-04-16 19:17) [7]Я незнаю, единственное
Не,Image1.Left:=Image1.Left+X — X0 ;
Image1.Top:=Image1.Top+Y — Y0 ;
а
if Sender is TImage then
with (Sender as TImage) do
begin
Left:=Left+X — X0 ;
Top:=Top+Y — Y0 ;
end;
Но это врядли поможет
← →
Gadenysh (2007-04-16 19:23) [8]сам столкнулся с таким. GraphicControl - ы не только мигают, еще и тормозят где-то неимоверно, если их таскать таким способом. Подскажите куда копать, кто знает
← →
{RASkov} (2007-04-16 21:07) [9]> [6] mahab © (16.04.07 19:08)
> [8] Gadenysh (16.04.07 19:23)
> Подскажите куда копать
Не таскать GraphicControl - ы по форме, а рисовать картинки на канве формы...
← →
Gadenysh (2007-04-17 18:02) [10]
> {RASkov} (16.04.07 21:07) [9]
картинки рисовать - не пойдет. У меня, например, на этих графикконтролах еще лежат всякие кнопочки, лабелы и прочая, да и с фоном при таскании как быть? с наложением контролов итп - все вручную?
может есть чюдесный ход - чтобы ррраз и все стало летать? и почему WinControl - ы при аналогичных операциях так погано себя не ведут?
← →
{RASkov} (2007-04-17 18:23) [11]> У меня, например, на этих графикконтролах еще лежат всякие
> кнопочки, лабелы и прочая,
Это что же за графконтролы, которые могут содержать другие контролы?
← →
Зяма (2007-04-17 18:24) [12]У меня, например, на этих графикконтролах еще лежат всякие кнопочки, лабелы и прочая, да и с фоном при таскании как быть? с наложением контролов итп - все вручную?
ГрафикКонтрол не может быть Парент"ом других контролов. По природе своей. Как ты умудрился так сделать?
← →
Gadenysh (2007-04-17 19:26) [13]хыхы, вручнуйю все отрисовано и функцыонал тоже вручную
← →
Зяма (2007-04-17 19:33) [14]с наложением контролов итп - все вручную?
хыхы, вручнуйю все отрисовано и функцыонал тоже вручную
Вот это действительно хыхы...
← →
Vovan #2 (2007-04-17 23:13) [15]Оно не мигает, оно дёргается.
DoubleBuffered надо ставить у формы, т.е. у парента.
Из обработчика OnMouseMove убрать последнюю строку:
if move = false then exit;
Image1.Left:=Image1.Left+ X - X0 ;
Image1.Top:=Image1.Top+Y - Y0 ;
// X0 := X; Y0 := Y;
Проверено - не мерцает, плавно ходит за мышкой.
← →
Kolan © (2007-04-18 12:23) [16]> X0 := X; Y0 := Y;
Вообще не нужны, проверил…
← →
Gadenysh (2007-04-18 13:16) [17]
> Vovan #2 (17.04.07 23:13) [15]
> Оно не мигает, оно дёргается.
вот именно, дергается, а почему?
← →
{RASkov} (2007-04-18 15:31) [18]> [17] Gadenysh (18.04.07 13:16)
var OldX, OldY: Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=True;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button<> mbLeft then Exit;
OldX:=X; OldY:=Y;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if not (ssLeft in Shift) then Exit;
Image1.SetBounds(Image1.Left+X-OldX, Image1.Top+Y-OldY, Image1.Width, Image1.Height);
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button<> mbLeft then Exit;
Image1MouseMove(Sender, [ssLeft], X, Y);
end;
end.
Ну вот ничего не дергается, фик его знает почему у вас дергается... Мышой может быстро дергаете?
← →
Kolan © (2007-04-18 15:33) [19]>
> вот именно, дергается, а почему?
Потому что неверно написано…
procedure TForm3.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then
begin
FMoseDown := True;
end;
end;
procedure TForm3.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (Sender is TImage) and FMoseDown then
begin
with (Sender as TImage) do
begin
Top := Top + Y — Round(Height/2);
Left := Left + X — Round(Width/2);
end;
end;
end;
procedure TForm3.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then
FMoseDown := False;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.047 c