Елена Богданова
Елена Богданова

Вопрос по канвасам. Делфи

У меня такая ситуация : пишу задание по работе с канвасами.

и у меня возникла проблема возникла:


var png:TPngImage;
begin
image6.Picture:=nil;
label1.caption:=' Distatoo';
application.ProcessMessages;
sleep (3000);
label1.Caption:=' Подключение... ';

// --------------------------ПОДКЛЮЧЕНИЕ К СЕРВЕРУ
{Если соединение уже установлено, то обрываем его}
if ClientSocket1.Active then
ClientSocket1.Close;
{Пытаемся соединиться}
ClientSocket1.Open;
application.ProcessMessages;

//---------------------------КОНЕЦ

image1:=timage.Create(self);
image2:=timage.Create(self);
image3:=timage.Create(self);
image6.Picture:=nil;
image5.Picture:=nil;
image4.Picture:=nil;
image3.Picture:=nil;
image2.Picture:=nil;
image1.Picture:=nil; {
image1.Canvas.brush.Color:=clWhite;
image2.Canvas.brush.Color:=clWhite;
image3.Canvas.brush.Color:=clWhite;
image4.Canvas.brush.Color:=clWhite;
image5.Canvas.brush.Color:=clWhite;
image6.Canvas.brush.Color:=clWhite; }
image1.Canvas.FloodFill(0, 0, clBlack, fsBorder); // закрашиваем всю область белым цветом
image2.Canvas.FloodFill(0, 0, clBlack, fsBorder);
image3.Canvas.FloodFill(0, 0, clBlack, fsBorder);
image4.Canvas.FloodFill(0, 0, clBlack, fsBorder);
image5.Canvas.FloodFill(0, 0, clBlack, fsBorder);
image6.Canvas.FloodFill(0, 0, clBlack, fsBorder);
image6.transparent:=true;
image5.transparent:=true;
image4.transparent:=true;
image3.transparent:=true;
image2.transparent:=true;
image1.transparent:=true;
image6.Visible:=false;
image5.Visible:=false;
image4.Visible:=false;
image3.Visible:=false;
image2.Visible:=false;
image1.Visible:=false;
image6.left:=0;
image5.left:=190;
image4.left:=0;
image3.left:=0;
image2.left:=0;
image1.left:=0;
image6.Top:=0;
image5.Top:=434;
image4.Top:=0;
image3.Top:=0;
image2.Top:=0;
image1.Top:=0;
image6.Width:=800;
image5.Width:=400;
image4.Width:=800;
image3.Width:=800;
image2.Width:=800;
image1.Width:=800;
image6.Height:=600;
image5.Height:=150;
image4.Height:=600;
image3.Height:=600;
image2.Height:=600;
image1.Height:=600;
label1.top:=72;
label1.caption:=' Авторизация';
label1.Font.Color:=clwindow;
Edit1.Visible:=true;
EditMask.Visible:=true;
png:=TPngImage.Create;

png.LoadFromFile('data\back.png');
image1.canvas.Draw(0,0,png);
image1.Visible:=true;

png.LoadFromFile('data\buttonstart.png');
image5.canvas.Draw(0,0,png);
image5.Visible:=true;

image1.BringToFront;
image5.BringToFront;

что у меня есть:
имка1 - фон
имка2-имка 6 используются для отображения различных часто меняющихся деталей (необходимо будет после авторизации на сокет сервере)
в данном случае пытаюсь через имку 5 вывести кнопку (которую друг должен будет доделать) ) а через имку 1 пытаюсь вывести фон, но отображается только его кусок. размеры окна - 800х600, размеры картинки фона аналогичны.
использую делфи 2010. помогите где я неправ? )

Тогда у меня есть еще вопросы к вам)

1) как тогда можно будет сделать карту из кусочков картинок?

смог решить проблему.
просто обнуление формы переместил после объявления размеров формы

АК
Александра Карпенко

>image1.canvas.Draw(0,0,png);
Нафиг-нафиг такие приколы. К тому же, при первой же перерисовке экрана твое изображение тупо исчезнет. Вообще-то тактическая проблема тут в том, что размер холста соответствует размеру картинки (Bitmap), который по умолчанию небольшой. А стратегическая - это принципиально неправильный подход. Твой TPngImage - явный наследник TGraphic, соответственно, должен поддерживать метод SaveToStream. Поэтому попробуй так:

ms:=TMemoryStream.Create;
try
png.SaveToStream(ms);
ms.Position:=0;
Image1.Picture.Bitmap.LoadFromStreаm(ms);
finally
FreeAndNil(ms);
end;

Похожие вопросы
Нужно нарисовать в делфи через канвас
Канвас. Растягивание изображений.
Вопрос по делфи 7!!!
вопрос программистом делфи .
Что легче C# или делфи. Вопрос
Вопрос по делфи, помогите пожалуйста
Вопрос с html в делфи
Вопрос по делфи, зайдите не трудно
Вопрос к тем, кто разбирается в Делфи! Помогите !!!
Вопрос про типизированные файлы в делфи