Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизПомогите с отрисовкой формы! Найти похожие ветки
← →
Antony000 © (2006-05-06 20:46) [0]brush.bitmap не изменяется почему то,
а при создании (form1.create) эта конструкция работает.
procedure TForm1.N21Click(Sender: TObject);
var JPEG:TJPEGImage; {Скины в JPEG}
begin
OpenPictureDialog1.InitialDir:=ExtractFilePath(Application.ExeName)+"Skins";
if OpenPictureDialog1.Execute then begin
JPEG:=TJPEGImage.Create;
try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.Assign(JPEG);
finally
JPEG.Free; end;
form1.brush.Bitmap:=image1.picture.bitmap;
end;
end;
← →
KilkennyCat © (2006-05-06 20:51) [1]Form1.Canvas.Brush.Bitmap
в Вашем случае - form1.brush.Bitmap - реадонли, можно только через assing. Но могу и приврать :)
← →
Antony000 © (2006-05-06 20:56) [2]Пробовал записывать и в Form1.Canvas.Brush.Bitmap
не сработало :(
← →
Kilkennycat © (2006-05-06 21:01) [3]
> Antony000 © (06.05.06 20:56)
И через ассинг? ща я сам проверю...
← →
Antony000 © (2006-05-06 21:02) [4]при использовании assign стопошибка
← →
KilkennyCat © (2006-05-06 21:10) [5]Угу. Посмотрел справку делфи. написал следующее:
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile("c:\1.bmp");
Form1.Canvas.Brush.Bitmap := Bitmap;
Form1.Canvas.FillRect(clientrect);
finally
Form1.Canvas.Brush.Bitmap := nil;
Bitmap.Free;
end;
end;
работает.
← →
Antony000 © (2006-05-06 21:16) [6]в том то и дело! с JPG почему то это не работает
← →
ЛшдлуттнСфе (2006-05-06 21:21) [7]я не уверен, но после Image1.Picture.Bitmap.Assign(JPEG);
нам уже наплевать, джпег там или нет - там битмап должен быть.
а вот на это Form1.Canvas.FillRect(clientrect); Вы обратили внимание?
← →
Antony000 © (2006-05-06 21:28) [8]обратил внимание. форма вместо заполнения битмапом (бывший jpeg) стала просто серой.
← →
Kilkennycat © (2006-05-06 21:32) [9]try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.Assign(JPEG);
finally
JPEG.Free; end;
form1.brush.Bitmap:=image1.picture.bitmap;
end;
предлагаю так.
try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.Assign(JPEG);
form1.brush.Bitmap:=image1.picture.bitmap;
finally
JPEG.Free;
end;
← →
Antony000 © (2006-05-06 21:37) [10]procedure TForm1.N21Click(Sender: TObject);
var JPEG:TJPEGImage; {Ñêèíû â JPEG}
begin
OpenPictureDialog1.InitialDir:=ExtractFilePath(Application.ExeName)+"Skins";
if OpenPictureDialog1.Execute then begin
JPEG:=TJPEGImage.Create;
try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.Assign(JPEG);
form1.brush.Bitmap:=image1.picture.bitmap;
finally
JPEG.Free;
end;
end;
end;
теперь код выглядит так...
но тоже без эффекта
← →
ЛшдлуттнСфе (2006-05-06 21:42) [11]у меня вышеприведенный код работает. разве что, репаинт формы добавил.
← →
Antony000 © (2006-05-06 21:50) [12]блин, чего то не пойму, толи лыжи не едут..
репайнт добавил, не работает
← →
Мефисто (2006-05-06 21:57) [13]var
P: TPicture;
begin
P := TPicture.Create;
try
P.LoadFromFile("C:\1.jpg");
Canvas.Brush.Bitmap := TBitmap.Create;
Canvas.Brush.Bitmap.Assign(P.Graphic);
Canvas.FillRect(ClientRect);
finally
P.Free;
Canvas.Brush.Bitmap.Free;
end;
end;
См. реализацию TImage :)
← →
Antony000 © (2006-05-06 22:29) [14]мефисто! не пашет твой код. контролы теряются при вызове TForm1.N21Click
← →
Antony000 © (2006-05-06 22:35) [15]стопошибка unknown picture file extension
у меня delphi 6 - win98se
← →
Мефисто (2006-05-06 22:39) [16]uses jpeg;
Не забыл подцепить?
У меня грузится. D7 - WinXP
← →
Мефисто (2006-05-06 22:43) [17]Antony 000 © (06.05.06 22:29) [14]
А по поводу пропажи контролов, фиг знает. Покажи свой итоговый код.
← →
лшдлуттнсфе (2006-05-06 22:44) [18]у меня 7 w2k.
я бы вообще реализовал бы через Draw
← →
Мефисто (2006-05-06 22:44) [19]С контролами понял, пропадают скорее всего TGraphicControl и Ko
← →
Antony000 © (2006-05-06 22:45) [20]delphi шесть у меня.
jpeg подцеплен.
самое интересное что в form1.create загрузка картинки похляла с этим кодом:
JPEG:=TJPEGImage.Create;
try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.Assign(JPEG);
finally
JPEG.Free; end;
← →
Мефисто (2006-05-06 23:37) [21]Antony 000 © (06.05.06 22:45) [20]
Мефисто (06.05.06 22:44) [19]
Чтобы контролы перересовывались код из Мефисто (06.05.06 21:57) [13]
вставь в OnPaint формы.
← →
Мефисто (2006-05-07 00:22) [22]точнее не весь код в онпаинт, а так какнибудь:
в онкреате:
P := TPicture.Create;
try
P.LoadFromFile("C:\1.jpg");
Canvas.Brush.Bitmap := TBitmap.Create;
Canvas.Brush.Bitmap.Assign(P.Graphic);
в онпаинте:
Canvas.FillRect(ClientRect);
в ондестрое:
P.Free;
Canvas.Brush.Bitmap.Free;
← →
Antony000 © (2006-05-07 12:45) [23]я попробовал твой код.
всё равно что то не то.
в онкреате отрисовка нормальная,
потом когда я заменяю изображение другим jpeg-ом такого же размера в процессе работы приложения почему то перерисовывается только часть картинки, поверх старой, причем каждый раз по разному. репайнт не помог.
← →
Antony000 © (2006-05-07 14:20) [24]Нижеприведенная процедура загружает битмап (точнее jpg) только один раз,
последующие разы почему то загружается только в image1
чувствую, что тут какая то мелочь, посмотрите пожалуйста:
(на форму кинуть button1 и image1)procedure TForm1.Button1Click(Sender: TObject);
var JPEG:TJPEGImage;
begin
OpenPictureDialog1.InitialDir:=ExtractFilePath(Application.ExeName)+"Skins";
if OpenPictureDialog1.Execute then begin
JPEG:=TJPEGImage.Create;
try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.Assign(JPEG);
form1.brush.bitmap:=image1.picture.bitmap;
finally
JPEG.Free;
end;
end;
form1.Repaint;
end;
← →
Мефисто (2006-05-07 17:32) [25]Antony 000 © (07.05.06 12:45) [23]
>> я попробовал твой код.
>> всё равно что то не то.
C этого момента поподробнее, что и как происходит?
>> в онкреате отрисовка нормальная,
>>
begin
потом когда я заменяю изображение другим jpeg-ом такого же размера в процессе работы приложения почему то перерисовывается только часть картинки, поверх старой, причем каждый раз по разному
end;
Отрисовку нужно производить в событии OnPaint формы!
Если твой код рабочий, то оформи его приблизительно в таком же стиле:
TForm.OnCreate
var
P: TPicture;
begin
P := TPicture.Create;
try
P.LoadFromFile("C:\1.jpg");
Canvas.Brush.Bitmap := TBitmap.Create;
Canvas.Brush.Bitmap.Assign(P.Graphic);
finally
P.Free;
end;
end;
TForm.OnPaint
// Рисуем чего надо и как надо
begin
Canvas.FillRect(ClientRect);
end;
TForm.OnDestroy
// Освобождаем ресурсы
begin
Canvas.Brush.Bitmap.Free;
end;
← →
KilkennyCat © (2006-05-07 19:04) [26]Я вот посмотрел исходники от TMSSoftware.... там тоже используют Draw. Честно говоря, я бы ни в жисть не догадался пользовать кисть...
← →
Мефисто (2006-05-07 19:24) [27]KilkennyCat © (07.05.06 19:04) [26]
Canvas.Brush.Bitmap - это наверно для ленивых, кому лень в цикле Draw крутить чтобы всю форму замостить :)
← →
KilkennyCat © (2006-05-07 19:27) [28]
> [27] Мефисто (07.05.06 19:24)
да зачем его крутить? Создается битмап, он один раз и мостится. В дальнейшем - только если форма поменяла размер.
← →
Мефисто (2006-05-07 19:57) [29]KilkennyCat © (07.05.06 19:27) [28]
Имелось ввиду замоститиь маленьким битмапом, а не одним большим. Т.е. по стилю черепица. Как в офрмлении рабочего стола винды или размноженное фоновое изображение на веб страничках к примеру.
← →
ЛшдлуттнСфе (2006-05-07 20:12) [30]
> [29] Мефисто (07.05.06 19:57)
да без разницы. хоть в один пиксел, можно соптимизировать в копирование-уже-скопированного, будет прогрессия, шустро и круто.
Но главное - механизм будет яснее и доступнее.
Мне как-то проще всегда держать готовое фоновое изображение самому, чем на что-то полагаться стороннее, и потом его флипить... Хотя, не утверждаю, что я - прав, возможно, у меня шаблон от долгой работы с DirectDraw.
← →
Antony000 © (2006-05-08 20:34) [31]Я сделал это простым способом, оказывается надо браш.битмап перед новым рисованием обнулять, тогда последняя написаная мной конструкция работает!
form1.Brush.Bitmap:=nil;
спасибо всем кто помогал!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.01 c