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

Вниз

Замостить Timage   Найти похожие ветки 

 
Шакал   (2009-01-16 10:24) [0]

Доброго времени суток!
Создал форму, с верху и слева панели - нужно всю остальную область замостить (из небольшого .bmp) т.е. сделать фон.
Пишу следующий код:

procedure TForm1.FormPaint(Sender: TObject);
var
x,y: integer;
pic: tbitmap;
pic1: timage;
begin
pic1:=timage.Create(form1);
pic1.Align:=alClient;
pic1.Parent:=form1;
pic:=tbitmap.Create;
pic.LoadFromFile("img\pole.bmp");
for x:=0 to round(pic1.width/120) do
for y:=0 to round(pic1.height/150) do
pic1.Canvas.Draw( X*120, Y*150, pic);

end;
Изоброжение появляется, но постоянно мигает (похоже постоянно прорисовывается заново).
Подскажите плиз...


 
Ega23 ©   (2009-01-16 10:42) [1]

Form1.DoubleBuffered := True?


 
Шакал   (2009-01-16 10:49) [2]


> Form1.DoubleBuffered := True?

Хм...добавил, картинка стабилизировалась, но когда мышкой водишь, курсор притормаживает с такойже переодичностью как картинка мигала(((


 
Шакал   (2009-01-16 10:51) [3]

и проц почти на 100% приложение грузит....


 
Медвежонок Пятачок ©   (2009-01-16 11:01) [4]

procedure TForm1.FormPaint(Sender: TObject);
var
....
pic.LoadFromFile("img\pole.bmp");
.....

А не слишком ли ты суров?


 
Плохиш ©   (2009-01-16 11:02) [5]


> Шакал   (16.01.09 10:51) [3]
>
> и проц почти на 100% приложение грузит....
>

Ты полчасика поводи, потом придёшь, ещё и про нехватку памяти спросишь.


 
Ega23 ©   (2009-01-16 11:04) [6]

Ну всё правильно, у тебя на каждую перерисовку такая фигня идёт.

Алгоритм такой:
1. Заводишь в памяти Bitmap, выставляешь ему размеры.
2. ОДИН РАЗ его мостишь.
3. При перерисовке формы назначаешь этот битмап канвасу формы.


 
Ega23 ©   (2009-01-16 11:05) [7]


> А не слишком ли ты суров?


Это цветочки. Он ещё по экземпляру TImage создаёт на каждую перерисовку.


 
Шакал   (2009-01-16 11:10) [8]


> Алгоритм такой:
> 1. Заводишь в памяти Bitmap, выставляешь ему размеры.
> 2. ОДИН РАЗ его мостишь.
> 3. При перерисовке формы назначаешь этот битмап канвасу
> формы.

а пример кода мона-_О

>
> Ты полчасика поводи, потом придёшь, ещё и про нехватку памяти
> спросишь.

через две минуты выдает)))))


 
Ega23 ©   (2009-01-16 11:21) [9]


> а пример кода мона-_О


Сам подумай. Учись учиться.


 
Шакал   (2009-01-16 11:29) [10]


> А не слишком ли ты суров?

в чем суровость? объясните плиз...


 
Медвежонок Пятачок ©   (2009-01-16 11:42) [11]

procedure TForm1.FormPaint(Sender: TObject);
.....
Caption := Format("Я закаким-то хреном загрузил этот файл уже %d раз"#13#10"А пофик, потому как я суров",[Tag]);
Tag := Succ(Tag);
......


 
Шакал   (2009-01-16 11:47) [12]


> > 2. ОДИН РАЗ его мостишь.

а как ограничить?


 
Медвежонок Пятачок ©   (2009-01-16 11:55) [13]

Надо использовать компонент TZamostitelRestrictor


 
Ega23 ©   (2009-01-16 11:55) [14]


> а как ограничить?
>


TForm.ClientWidth, TForm.ClientHeight + F1.


 
Шакал   (2009-01-16 12:12) [15]


> Надо использовать компонент TZamostitelRestrictor

напишешь, скинь на мыло)))


 
Шакал   (2009-01-16 12:17) [16]


> TForm.ClientWidth, TForm.ClientHeight + F1.

я имел ввиду количество раз мощения)))


 
Ega23 ©   (2009-01-16 12:30) [17]


> я имел ввиду количество раз мощения)))


Тебе незнакомы операции деления, вычитания, сложения и умножения?
Может ну его нафиг, программирование? В армии люди нужны... Да и с дворниками как-то тоже не очень...


 
KSergey ©   (2009-01-16 12:30) [18]

> Шакал   (16.01.09 12:17) [16]
> я имел ввиду количество раз мощения)))

Их не надо искусственно ограничивать. Достаточно разместить этот код в обработчике, срабатывающем 1 раз за время жизни программы (или формы), а не каждый раз при отрисовке.
Например, в TForm.OnCreate


 
Ega23 ©   (2009-01-16 12:45) [19]


> Например, в TForm.OnCreate


Это для старта. И в OnResize


 
{RASkov} ©   (2009-01-16 12:57) [20]

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormPaint(Sender: TObject);
 private { Private declarations }
 public  { Public declarations }
   BMP: TBitmap;
 end;

var Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 BMP:=TBitmap.Create;
 BMP.LoadFromFile(<name.bmp>);
end;

procedure TForm1.FormPaint(Sender: TObject);
var X, Y: Integer;
begin
 for X:=0 to ClientWidth div BMP.Width do
  for Y:=0 to ClientHeight div BMP.Height do
   Canvas.Draw(X*BMP.Width, Y*BMP.Height, BMP);
end;

end.


 
Шакал   (2009-01-16 13:36) [21]


> {RASkov} ©

В принципе работает без тормозов, НО проц грузит на 99% и каждую 1 секунду жрет по 16 кб памяти....


 
Шакал   (2009-01-16 13:41) [22]

а не все ок....просто timage забыл удалить.....
ОГРОМНОЕ СПАСИБО {RASkov}
И Всем огромное человеческое спасибо за помощь...



Страницы: 1 вся ветка

Текущий архив: 2009.03.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
15-1230522009
Slider007
2008-12-29 06:40
2009.03.01
С днем рождения ! 28 декабря 2008 воскресенье


3-1215617383
Morrison
2008-07-09 19:29
2009.03.01
Как восстановить индексы в Paradox?


15-1230133459
Городской Шаман
2008-12-24 18:44
2009.03.01
А так ли нужен сборщик мусора?


2-1232018323
pavelkq
2009-01-15 14:18
2009.03.01
Фокус на Stringgrid


6-1198685585
Lamer666
2007-12-26 19:13
2009.03.01
Проблемы с подсчетом трафика!!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский