Zdravím,
mám problém s vykreslování na Canvas u TImage ve chvíli, kdy zvětším velikost toho TImage. Canvas, nebo alespoň jeho užitečná plocha zůstane v původní velikosti. Navíc když dojde k tomuto stavu kdy Canvas nezabírá celou plochu TImage, dochází při překreslování k nepříjemnému problikávání při překreslování (ale problikává celá velikost TImage).
Jediné, co pomáhá k tomu aby po zvětšení TImage se dala použít celá plocha pro kreslení na jeho Canvas, je provést Obrazek.Destroy; a znovu Obrazek.Create(Form);, což je asi krajně nevhodný způsob, zvláště když překreslování provádí i procedura Obrazek.OnMouseMove;
Popíšu zhruba jak zdroj funguje:
procedure VykreslitCanvasObrazku(WidthObr, HeightObr: Integer);
var
ContainerCanvasu: TBitmap;
begin
ContainerObrazku := TBitmap.Create;
ContainerObrazku.Width := WidthObr;
ContainerObrazku.Height := HeightObr;
Obrazek.Width := WidthObr;
Obrazek.Height := Height;
ContainerObrazku.Canvas.Rectangle(0,0,Obrazek.Width, ObrazekLeft); //Vymazat stávající obr.
ContainerObrazku.Draw(NejakeX, NejakeY, NejakeGraphics); //načíst nějaké obrazky
Obrazek.Canvas.Draw(0,0,ContainerObrazku); //vykreslení
end;
Vytvoření příprva pro vykreslení z TBitmap je v pořádku, nastavení rozměrů i rozměrů TImage jménem Obrazek také proběhne (je vyzkoušeno pomocí showmessage že skutečné rozměry se opravdu upravují), ale ve chvíli, kdy se provádí Obrazek.Canvas.Draw(0,0,ContainerObrazku); a nové rozměry jsou větší než při minulém využití procedury, dojde k tomu, že se aktualizuje pouze Canvas ve velikosti, v jaké byl Obrazek před zvětšením a zbytek obrázku, ta část o kterou se Obrazek zvětšil, je nevykreslená, průhledná... funguje pouze výřez, který má velikost původní velikosti Obrazku.
Neporadil by tedy prosím někdo, jak Canvasu domluvit, aby pro vykreslování využíval celou plochu TImage, jemuž Canvas náleží?
Děkuji.