Można po nim rysować, ale obszar roboczy Canvas ogranicza się do wymiarów przed zmianą rozmiaru obiektu Image. Mówią tutaj o Image->Canvas, a nie o Image->Picture->Bitamp->Canvas. W tym właśnie problem, że Image->Canvas, nie uwzględnia zmiany rozmiaru i wywołanie funkcji Repaint tego nie zmienia.polymorphism napisał(a):Jeśli przechowuje to, co zostało na nim narysowane, to znaczy, że jednak tę powierzchnie posiada, jest nią bitmapa.
Tak przypuszczam, ale nie jestem do końca pewien, gdyż w przypadku
TImage mamy do czynienia z dwoma płótnami typu
TCanvas, o czym wspomniałem wyżej, czyli:
Image->Canvas
Image->Picture->Bitmap->CanvasOczywiście drugie Canvas należy do klasy TBitmap. W przypadku klasy TBitmap również trzeba z góry określić rozmiar, jednak w odróżnieniu on Image->Canvas, ten rozmiar może się zmieniać dynamicznie. To mi podsuwa rozwiązanie:
TImage *str1 = new TImage(this);
str1->Parent = this;
str1->Width = 814;
str1->Left = 8;//Form_Spis->ClientWidth/2 - str1->Width/2;
str1->Top = 35;//Panel->Height + 5;
int lp;
for (lp = 1; lp < 20; lp++)
{
str1->Height = lp * 30;
str1->Picture->Bitmap->Width = str1->Width;
str1->Picture->Bitmap->Height = str1->Height;
str1->Picture->Bitmap->Canvas->TextOut(30, (lp-1)*30, lp);
}
Przy czym obiekt
str1 typu
TImage w żadnym razie nie powinien być obiektem lokalnym, sugerowałbym zadeklarować go w pliku nagłówkowym w sekcji
private i całość zrobić w ten sposób:
plik nagłówkowym np. Unit1.hplik źródłowy np. Unit1.cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(str1 != NULL) delete str1;
str1 = new TImage(this);
str1->Parent = this;
str1->Width = 814;
str1->Left = 8;//Form_Spis->ClientWidth/2 - str1->Width/2;
str1->Top = 35;//Panel->Height + 5;
int lp;
for (lp = 1; lp < 20; lp++)
{
str1->Height = lp * 30;
str1->Picture->Bitmap->Width = str1->Width;
str1->Picture->Bitmap->Height = str1->Height;
str1->Picture->Bitmap->Canvas->TextOut(30, (lp-1)*30, lp);
}
}