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

Вниз

Как правильно "растянуть" рисунок на кнопке?   Найти похожие ветки 

 
vegarulez ©   (2007-04-14 11:09) [0]

Привет Мастерам! У меня такой вопрос, как правильно растянуть рисунок, который меньше Батона по размеру?

Делаю так, как приведено ниже - но получается не совсем то что хочу получить.
Подскажите.

...
       for i:=0 to ControlCount-1 do
       //i:=3;
       if Controls[i] is TButton then
       begin
       (Controls[i] as TButton).Bitmap.LoadFromFile("./picture/" + Controls[i].name + "2.png");
       (Controls[i] as TButton).Bitmap.Canvas.StretchDraw(Rect(0,0,Controls[i].Width,Controls[i].Height ),(Controls[i] as TButton).Bitmap);
       end;
...


 
{RASkov}   (2007-04-14 11:30) [1]

> [0] vegarulez ©   (14.04.07 11:09)

Rect убавь немного со всех сторон....
InflateRect();


 
{RASkov}   (2007-04-14 11:32) [2]

У TButton вообщето нет Bitmap свойства...


 
vegarulez ©   (2007-04-14 11:38) [3]

Есть... CLX...


 
{RASkov}   (2007-04-14 11:57) [4]

> Делаю так, как приведено ниже - но получается не совсем то что хочу получить.

И что получается?


 
vegarulez ©   (2007-04-14 12:03) [5]

Получается рисунок увеличенный до нужного размера, перекрытый увеличенным рисунком, в тех местах, снизу, справа, где заканчивается рисунок...

если просто сделать

(Controls[i] as TButton).Bitmap.LoadFromFile("./picture/" + Controls[i].name + "2.png");

то получается рисунок как бы дублируется где заканчивается 1 начинается другой...

если ещё и так  сделать

(Controls[i] as TButton).Bitmap.Canvas.StretchDraw(Rect(0,0,Controls[i].Width,Controls[i].Height  ),(Controls[i] as TButton).Bitmap);

то рисунок по идее увеличивается... только всё равно границы остаются - где заканчивается 1 начинается друугой... реально то рисунок уже увеличен.. но границы  мест где один "приклеивается" к другому, остаются теже...


 
{RASkov}   (2007-04-14 12:15) [6]

 for i:=0 to ControlCount-1 do
  if Controls[i] is TButton then
   begin
   Bmp.LoadFromFile("./picture/" + Controls[i].name + "2.png");
   R:=Button1.ClientRect;
   InflateRect(R,-2,-2);
   (Controls[i] as TButton).Bitmap.Canvas.StretchDraw(R, Bmp);
   end;

локал перемен.:
Bmp - TBitmap, заранее создать и потом убить.
R - TRect;
Оно? Должны присутствовать все картинки со специф. именами.
Или тебе два рисунка надо на кнопке? Кстати эти рисунки сотруться при перерисовке....


 
vegarulez ©   (2007-04-14 12:33) [7]

Не... дело в том, что представим себе, что я не знаю, какой размер кнопки и какой размер рисунка... и по этому мне нужно как бы "растянуть рисунок" на кнопку...  
Поэтому InflateRect(R,-2,-2) для такого помоему не подойдёт..


 
vegarulez ©   (2007-04-14 12:36) [8]

Нет мне 1 рисунок нуно... а не 2... просто растянуть его надо на кнопку...


 
{RASkov}   (2007-04-14 13:01) [9]

> [8] vegarulez ©   (14.04.07 12:36)

for i:=0 to ControlCount-1 do
 if Controls[i] is TButton then begin
  Bmp.LoadFromFile("./picture/" + Controls[i].name + "2.png");
  (Controls[i] as TButton).Bitmap.Width:=(Controls[i] as TButton).Width-4;
  (Controls[i] as TButton).Bitmap.Height:=(Controls[i] as TButton).Height-4;
  (Controls[i] as TButton).Bitmap.Canvas.StretchDraw((Controls[i] as TButton).Bitmap.Canvas.ClipRect, Bmp);
 end;


> Кстати эти рисунки сотруться при перерисовке....

Это я пошутил, не про тот канвас подумал...


 
{RASkov}   (2007-04-14 13:04) [10]

for i:=0 to ControlCount-1 do
if Controls[i] is TButton then begin
 Bmp.LoadFromFile("./picture/" + Controls[i].name + "2.png");
 with (Controls[i] as TButton) do begin
  Bitmap.Width:=Width-4;
  Bitmap.Height:=Height-4;
  Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect, Bmp);
 end;
end;


 
vegarulez ©   (2007-04-16 11:56) [11]

Что-то не совсем понятно что делает твой код... но не им явно не получается его растянуть.
Просто кнопка окрашивается в белый цвет.


 
{RASkov}   (2007-04-16 12:19) [12]

> [11] vegarulez ©   (16.04.07 11:56)

Я проверил на ТBitBtn"ах - все нормально, а вот как там дела с CLX Button"ом, но думаю смысл один:
Создаешь временный битмап, грузишь в него картинку(я грузил bmp), Тот битмап, что у кнопки, есле не создан создаешь и выставляешь размер чуть меньше самой кнопки потом стречишь на нее картинку из временного битмапа. Вот.


 
vegarulez ©   (2007-04-16 12:40) [13]

Делаю так:


...
 private
 Bmp:Tbitmap;
...
 Bmp := TBitmap.Create;
...

if Controls[i].name="Button2" then
begin
Bmp.LoadFromFile("c:\1.png");
with (Controls[i] as TButton) do begin
 Canvas.StretchDraw(ClientRect,Bmp);
end;



Он всё нормально рисует на форме... от 0,0 до нужного размера...

подставляю Батон....  - ругается и отказывается рисовать....  Invalide canvas state request.    


...
 private
 Bmp:Tbitmap;
...
 Bmp := TBitmap.Create;
...

if Controls[i].name="Button2" then
begin
Bmp.LoadFromFile("c:\1.png");
with (Controls[i] as TButton) do begin
 Button2.Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
end;



В чём тут дело?  Чем отличается рисование на канве формы - первый код, от рисования на канве кнопки - второй код?


 
vegarulez ©   (2007-04-16 12:47) [14]

Если же делаю так - то рисует и растягивает но получается не так как мне надо... рисунки увеличены до нужного размера, но залазиют друг на друга... в местах окончания 1-го рисунка...  

for i:=0 to ControlCount-1 do
if Controls[i].name="Button2" then
begin
Bmp.LoadFromFile("c:\vega\!PROJECT_UNIPLAT\v7_vk17\picture\bee2.png");
with (Controls[i] as TButton) do begin
 Button2.Bitmap:=Bmp;
 Button2.Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
end;


 
vegarulez ©   (2007-04-16 12:56) [15]

Понял сам!!! УРа!!!


 
vegarulez ©   (2007-04-16 13:16) [16]

Дело всё наверно в том что изначально битмапа на кнопке нет... поэтому и канвы нет... и низя с нй ничего сделать... - поэтому он и ругался... на форме то битмап сразу есть в момент создания...  

чтобы он, потом знал до какого рамера нужно растягивать канву, рисунка который хотим поместить... и при этом не накладывать рисунки друг на друга в местах их окончаний... нужно заранее определить размер битмапа кнопки... и тогда он при загрузки растянет канву правильно на нажнуы размер битмапа, который мы заранее определили....

Может не совсем правильно объяснил... но из получившегося - я так это понял...

Окончательный вариант

         

for i:=0 to ControlCount-1 do
       //i:=3;
       if Controls[i] is TButton then
       begin
        Bmp.LoadFromFile("./picture/" + Controls[i].name + "2.png");
       with (Controls[i] as TButton) do
        Begin
    Bitmap.Width:=Width;  //  в них было дело
         Bitmap.Height:=Height;     //  в них было дело

         Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
        End;
CODE>


 
{RASkov}   (2007-04-16 13:32) [17]

> до какого рамера нужно растягивать канву

Канву растянуть нельзя, ее размер зависит от размера того кому она пренадлежит... криво сказал, но умно у меня не получится :(
Сама по себе канва это нет ни что. При создании Битмапа, создается также и канва для него, и "размер" канвы будет зависить от размера Битмапа.
Метод LoadFromFile - Битмапа, устанавливает размеры самого битмапа в соответсвии с размерами картинки из файла, а когда в ручки рисуешь на канве битмапа, то в ручки и выставляй размеры этого битмапа. Вот так вот. Криво, но мысль думаю понял. Канва - контекст устройства.



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

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

Наверх




Память: 0.52 MB
Время: 0.014 c
2-1176525285
Belorus
2007-04-14 08:34
2007.05.06
Классы


15-1176183399
Megabyte
2007-04-10 09:36
2007.05.06
Нынешнее состояние "начинающим"


15-1175936121
ЭРИКА
2007-04-07 12:55
2007.05.06
ПОЗДРАВЛЕНИЕ С ДНЕМ РОЖДЕНИЯ


2-1176625469
ari_9
2007-04-15 12:24
2007.05.06
не могу сделать Run из Delphi, хотя собранный .exe работает


2-1176443674
vitv
2007-04-13 09:54
2007.05.06
DBGrid-блокировка ввода текста с клавиатуры