Проблемы с выводом Bitmap на Image
В общем, такая ситуация… Создаю Bitmap, устанавливаю размер, формат пикселя (pf1bit), заполняю белым (FillRect). Далее на нем рисуется дерево, после чего он благополучно вырисовывается на Image формы (Draw(0, 0, Bitmap)), при этом размеры Image подгоняются под размеры Bitmap’а. После прорисовки Bitmap удаляется. Это все повешено на событие FormShow соответствующей формы. Так вот при первом показе формы, все ОК. Размеры Bitmap и Image совпадают, заливка белая как положено. НО!!! При закрытии формы, и последующих перерисовок ДРУГИХ (больших по размеру вывода) деревьев форма остается в таком же состоянии, что и после первой прорисовки. Т.е. узлы рисуются новые, НО в той же области, что и раньше (т.е. дерево попросту НЕ помещается в отведенную область на Image). Формально размеры Image меняются в соответствии с размерами Bitmap’а (Image растет или уменьшается), НО почему-то не отображаются деревья, БОЛЬШИЕ, чем самое первое (меньшие и равные по размеру Bitmap - ОК). AutoSize == false…
А если поставить AutoSize = true? И добавить ScrollBox чтобы если большие картинки не влазят то появлялась прокрутка?
TRect SourceRect, DestinationRect;
SourceRect = Rect(HorzScrollBar->Position, VertScrollBar->Position,
HorzScrollBar->Position + Width, VertScrollBar->Position + Height);
DestinationRect = Rect(0, 0, Width, Height);
Canvas->CopyMode = cmSrcCopy;
Canvas->CopyRect(DestinationRect, Bitmap->Canvas, SourceRect);
НО!!! Теперь возникла новая проблема… Дерево вырисовывается на Bitmap’е в отдельно созданном потоке (т.к. дерево может быть огромных размеров и хотелось бы останавливать сей процесс рисования в любой момент, а ProcessMessages() использовать не хочу), по завершении которого вызывается FormShow().
Так вот, если во время рисования перемещать мышку (причем только внутри формы, которая является вызывающей по отношению к форме отображения) или нажимать кнопки, естественно никаким образом не влияя на процесс прорисовки, то когда форма появляется, то она пустая… Т.е. Bitmap не прорисован… И может быть, что из 10 раз нарисуются все 10, а может быть и 1…
Bitmap иногда достигает размеров 1500000x3000… Может из-за этого? Указатель на Bitmap создается один раз при создании главной формы и является глобальным. И еще… Чтобы получить такой размер я использовал формат пикселей pf1bit. Monochrome НЕ обеспечивает таких размеров (вылетает с ошибкой нехватки ресурсов).
Что посоветуете?