перерисовка компонента :(

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
tol
Сообщения: 8
Зарегистрирован: 17 апр 2006, 02:25

никак ненайду решения одного явления.

Нужно создать канву для отрисовки изображений переменного
размера. Беру ScrollBox кладу на него Image, свойство
Image.Align := alClient
Теперь если перед тем как что-либо нарисовать на канве
сначала её увеличить то при прокрутке ScrollBox канва видна вовсём
своём размере. А если перед увеличением размера что-либо нарисовать и потом увеличить Image то при прокрутке ScrollBox
видна только часть Image которая вписывалась в размер ScrollBox.
Какой метод применить что-бы избавиться от этого бага :?:

Для более ясного представления привожу пример -

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Image1: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

//если использовать эту процедуру первой то никаких проблем нет
procedure TForm1.Button2Click(Sender: TObject);
begin
Image1.Width := 300;
end;

//а если перед увеличением размера использовать эти процедуры
//то при прокрутке видна только часть канвы
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.MoveTo(0,50);
Image1.Canvas.LineTo(300,50);
Image1.Canvas.MoveTo(100,0);
Image1.Canvas.LineTo(100,132);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Image1.Canvas.MoveTo(50,0);
Image1.Canvas.LineTo(40,132);
end;

end.
tol
Сообщения: 8
Зарегистрирован: 17 апр 2006, 02:25

я пробовал добавлять Image1.SetBounds() всё работает как
раньше. То-есть если на канве что-либо нарисовать до увеличения
размера (это когда полосы прокрутки в ScrollBox не проявляются) то при
увеличении длинны Image в ScrollBox появляются полосы прокрутки, когда
пытаюсь посмотреть скрытую часть канвы то вижу вместо рисунка линии пустое место
:o ops:
vunder
Сообщения: 74
Зарегистрирован: 10 май 2006, 12:19
Откуда: Санкт-Петербург
Контактная информация:

Используй обработчик OnPaint(). Косяки происходят потому, что не определено перерисовка объекта
tol
Сообщения: 8
Зарегистрирован: 17 апр 2006, 02:25

Спасибо за совет , я решил больше не мучиться поставить
максимальный размер канвы , а полосы прокрутки ScrollBox
скрыть и показывать при определённых условиях :?
tol
Сообщения: 8
Зарегистрирован: 17 апр 2006, 02:25

Ура :lol: Случайно узнал решение :lol:

Просто при увеличении компонента Image - Canvas надо так-же
принудительно пропорционально увеличивать через
Image.Picture.Bitmap.Canvas.Width и всё тогда работает 8)
Ответить