Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.011 c
15-1145961309
Manic Mechanic
2006-04-25 14:35
2006.05.28
Сходил таки на керлинг, как приглашали


15-1146332510
Festor:)
2006-04-29 21:41
2006.05.28
Разгон Amd Athlon 64 3000+


15-1146647604
Yanis
2006-05-03 13:13
2006.05.28
Где скачать java-игры для телефона?


3-1143802532
pmy482
2006-03-31 14:55
2006.05.28
QReport - не забывает старые данные, дублирует


1-1145517697
DimMih
2006-04-20 11:21
2006.05.28
Текстовый файл-таблица





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский