Форум: "Начинающим";
Текущий архив: 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