Главная страница
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.51 MB
Время: 0.012 c
15-1230469106
NailMan
2008-12-28 15:58
2009.03.01
Вопрос владельцам балонных пневматических пистолетов


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


15-1230831771
Riply
2009-01-01 20:42
2009.03.01
Борьба с торможением компьютера.


15-1230733143
Slider007
2008-12-31 17:19
2009.03.01
С днем рождения ! 31 декабря 2008 среда


15-1230450049
Dreamse
2008-12-28 10:40
2009.03.01
Вопрос про многоядерные процессоры и способы работы с ними