Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.042 c
2-1176444828
trula
2007-04-13 10:13
2007.05.06
excel вставка рисунка под нужным углом в нужную точку


2-1176904042
Halz
2007-04-18 17:47
2007.05.06
Простенькая задача


2-1176526279
NewPlayer
2007-04-14 08:51
2007.05.06
почему не уничтожается обьект


15-1175898373
Gero
2007-04-07 02:26
2007.05.06
Шедевр


2-1176529067
Romm
2007-04-14 09:37
2007.05.06
Помогите найти ошибку





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