Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

Помогите с отрисовкой формы!   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.028 c
2-1147259154
alles
2006-05-10 15:05
2006.05.28
Переполнение типа Byte


3-1144404814
Russ
2006-04-07 14:13
2006.05.28
запрос для выбора данных из двух БД


2-1147203397
КИРПИЧ
2006-05-09 23:36
2006.05.28
ПОМОГИТЕ ПОЖАЛСТА


2-1147070660
Dstr
2006-05-08 10:44
2006.05.28
Компеляция ресурсов


2-1147156430
EvgeniyC
2006-05-09 10:33
2006.05.28
Здраствуйте! Вопрос: Можно ли сохранить в граф. файл?