[Delphi] Ресайз Image во время работы программы
Исходная форма:

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

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

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

У 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 однако на "новом месте" ничего не рисуется

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

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

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

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

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

и каким образом ты предлагаешь его использовать?
Вызывать, естественно. Есть другие предложения?
На евент WM_SIZE, или как он там называется (может, там, onResize) вызываешь стретчдро.
На евент WM_SIZE, или как он там называется (может, там, onResize) вызываешь стретчдро.
Image1.Canvas.StretchDraw(Image1.ClientRect,Image1.Picture.Graphic);
убожество и не работает:


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

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

пришлось делать через одно место..
правда ексепшн вылетает, когда канвас сжимается до нулевой высоты....
ну ничего я это констрэйнтсами подправлю..
Image1.Free;
Image1:=TImage.Create(Self);
Image1.Top,Left,Width,Height:=...
Image1.Parent:=Self;
правда ексепшн вылетает, когда канвас сжимается до нулевой высоты....
ну ничего я это констрэйнтсами подправлю..
Гы, рульно 

там есть размеры канвы и размеры картинки
надо ресайзить и то и другое и делать Update
Image1->Canvas->Width += 100;
Image1->Picture->Bitmap->Width += 100;
Image1->Update;
Че-то вроде этого по-моему должно быть.
надо ресайзить и то и другое и делать Update
Image1->Canvas->Width += 100;
Image1->Picture->Bitmap->Width += 100;
Image1->Update;
Че-то вроде этого по-моему должно быть.
ты мегакрут!
респекты
респекты
Оставить комментарий
yolki
как сделать это правильно?А то она ресайзится только до первого рисования. после этого ресайз не работает
Точнее, канва не увеличивается больше того размера, на котором начали рисовать