[Delphi] Ресайз Image во время работы программы

yolki

как сделать это правильно?
А то она ресайзится только до первого рисования. после этого ресайз не работает
Точнее, канва не увеличивается больше того размера, на котором начали рисовать

yolki

Исходная форма:

У Image стоят anchors, чтобы он расширялся вместе с формой.
по кнопочке:

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
with Image1.Canvas do
begin
Pen.Color:=clRed;
Pen.Width := 3;
MoveTo(0,Image1.Height div 2);
for i:=0 to Image1.Width do
begin
LineTo(i,round(-sin(i/Image1.width*10)*Image1.Height/2+Image1.Height/2;
end;
end;
end;

запускаем, жмём кнопку:

ресайзим форму, жмём кнопку:

Размеры изменяются (Image.widht, Image.Height однако на "новом месте" ничего не рисуется

maggi14

Canvas.StretchDraw

yolki

другой вариант -
запускаем, ресайзим, жмём кнопочку - вуаля:

ресайзим ещё чуть-чуть и жмём кнопочку:

В общем, умеет менять размеры до первого рисования

yolki

и каким образом ты предлагаешь его использовать?

maggi14

Вызывать, естественно. Есть другие предложения?
На евент WM_SIZE, или как он там называется (может, там, onResize) вызываешь стретчдро.

yolki


Image1.Canvas.StretchDraw(Image1.ClientRect,Image1.Picture.Graphic);

убожество и не работает:

maggi14

ууу а обещают, что работает

yolki

он не то делает.
он рисует картинку в заданный прямоугольник.
А в моём случае - он не раздвигает "видимую часть" картинки на новые размеры

yolki

самое интересное, что если использовать Label вместо Image, то работает!

maggi14

Там фигня в том, что есть отдельно Image, а есть отдельно Canvas. И как они связываются..

yolki

пришлось делать через одно место..

Image1.Free;
Image1:=TImage.Create(Self);
Image1.Top,Left,Width,Height:=...
Image1.Parent:=Self;

правда ексепшн вылетает, когда канвас сжимается до нулевой высоты....
ну ничего я это констрэйнтсами подправлю..

maggi14

Гы, рульно

Slavaga

там есть размеры канвы и размеры картинки
надо ресайзить и то и другое и делать Update
Image1->Canvas->Width += 100;
Image1->Picture->Bitmap->Width += 100;
Image1->Update;
Че-то вроде этого по-моему должно быть.

yolki

ты мегакрут!
респекты
Оставить комментарий
Имя или ник:
Комментарий: