Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с отрисовкой формы! [D6, 95/98, XP]


Страницы:   1 2

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]

блин, чего то не пойму, толи лыжи не едут..
репайнт добавил, не работает


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо