![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с отрисовкой формы! [D6, 95/98, XP]
Antony000 © (2006-05-06 20:46:00)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;
Antony000 (2006-05-08 20:34:00) [1]Я сделал это простым способом, оказывается надо браш.битмап перед новым рисованием обнулять, тогда последняя написаная мной конструкция работает!
form1.Brush.Bitmap:=nil;
спасибо всем кто помогал!
ЛшдлуттнСфе (2006-05-07 20:12:00) [2]
> [29] Мефисто (07.05.06 19:57)
да без разницы. хоть в один пиксел, можно соптимизировать в копирование-уже-скопированного, будет прогрессия, шустро и круто.
Но главное - механизм будет яснее и доступнее.
Мне как-то проще всегда держать готовое фоновое изображение самому, чем на что-то полагаться стороннее, и потом его флипить... Хотя, не утверждаю, что я - прав, возможно, у меня шаблон от долгой работы с DirectDraw.
Мефисто (2006-05-07 19:57:00) [3]KilkennyCat © (07.05.06 19:27) [28]
Имелось ввиду замоститиь маленьким битмапом, а не одним большим. Т.е. по стилю черепица. Как в офрмлении рабочего стола винды или размноженное фоновое изображение на веб страничках к примеру.
KilkennyCat (2006-05-07 19:27:00) [4]
> [27] Мефисто (07.05.06 19:24)
да зачем его крутить? Создается битмап, он один раз и мостится. В дальнейшем - только если форма поменяла размер.
Мефисто (2006-05-07 19:24:00) [5]KilkennyCat © (07.05.06 19:04) [26]
Canvas.Brush.Bitmap - это наверно для ленивых, кому лень в цикле Draw крутить чтобы всю форму замостить :)
KilkennyCat (2006-05-07 19:04:00) [6]Я вот посмотрел исходники от TMSSoftware.... там тоже используют Draw. Честно говоря, я бы ни в жисть не догадался пользовать кисть...
Мефисто (2006-05-07 17:32:00) [7]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;
Antony000 (2006-05-07 14:20:00) [8]Нижеприведенная процедура загружает битмап (точнее 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;
Antony000 (2006-05-07 12:45:00) [9]я попробовал твой код.
всё равно что то не то.
в онкреате отрисовка нормальная,
потом когда я заменяю изображение другим jpeg-ом такого же размера в процессе работы приложения почему то перерисовывается только часть картинки, поверх старой, причем каждый раз по разному. репайнт не помог.
Мефисто (2006-05-07 00:22:00) [10]точнее не весь код в онпаинт, а так какнибудь:
в онкреате:
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;
Мефисто (2006-05-06 23:37:00) [11]Antony 000 © (06.05.06 22:45) [20]
Мефисто (06.05.06 22:44) [19]
Чтобы контролы перересовывались код из Мефисто (06.05.06 21:57) [13]
вставь в OnPaint формы.
Antony000 (2006-05-06 22:45:00) [12]delphi шесть у меня.
jpeg подцеплен.
самое интересное что в form1.create загрузка картинки похляла с этим кодом:
JPEG:=TJPEGImage.Create;
try
JPEG.LoadFromFile(OpenPictureDialog1.FileName);
Image1.Picture.Bitmap.Assign(JPEG);
finally
JPEG.Free; end;
Мефисто (2006-05-06 22:44:00) [13]С контролами понял, пропадают скорее всего TGraphicControl и Ko
лшдлуттнсфе (2006-05-06 22:44:00) [14]у меня 7 w2k.
я бы вообще реализовал бы через Draw
Мефисто (2006-05-06 22:43:00) [15]Antony 000 © (06.05.06 22:29) [14]
А по поводу пропажи контролов, фиг знает. Покажи свой итоговый код.
Мефисто (2006-05-06 22:39:00) [16]uses jpeg;
Не забыл подцепить?
У меня грузится. D7 - WinXP
Antony000 (2006-05-06 22:35:00) [17]стопошибка unknown picture file extension
у меня delphi 6 - win98se
Antony000 (2006-05-06 22:29:00) [18]мефисто! не пашет твой код. контролы теряются при вызове TForm1.N21Click
Мефисто (2006-05-06 21:57:00) [19]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 21:50:00) [20]блин, чего то не пойму, толи лыжи не едут..
репайнт добавил, не работает