Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.03.2021, 09:10
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию Jvlabel в Image

Есть Jvlabel текст расположен под углом, есть тень текста. Возможно ли считать пиксели Jvlabel, чтобы разместить в Image?
Пробовал так

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
image4.Width:=Jvlabel1.Width-3;
image4.Height:=Jvlabel1.Height-2;
image4.Canvas.Font:=JvLabel1.Font;
Image4.Canvas.TextOut(0, 0, form1.JvLabel1.Caption);
end;

Cам понимаю что считываю именно текст, а не пиксели и загоняю в Image.
А нужна тень и угол наклона.

Последний раз редактировалось crazyman, 08.03.2021 в 10:15.
Ответить с цитированием
  #2  
Старый 08.03.2021, 09:55
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

Сделал так
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
image4.Width:=Jvlabel1.Width-3;
image4.Height:=Jvlabel1.Height-2;
image4.Canvas.Font:=JvLabel1.Font;
Image4.Canvas.CopyRect(Rect(0, 0, image4.Width, image4.Height),Jvlabel1.Canvas,Rect(0, 0, image4.Width, image4.Height));
end;

но так как JvLabel прозрачный, то в Image попадает то что за JvLabel.

Последний раз редактировалось crazyman, 08.03.2021 в 10:15.
Ответить с цитированием
  #3  
Старый 08.03.2021, 19:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

а посмотри, не ли метода PaintTo у компонента. Если есть, то используй его для отрисовки на соотв. канве...
Ответить с цитированием
  #4  
Старый 09.03.2021, 18:58
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
Печаль

К сожалению нет
Ответить с цитированием
  #5  
Старый 09.03.2021, 19:55
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Иерархия такая: TGraphicControl -> TJvGraphicControl -> TJvlabel
Следовательно TJvlabel не имеет метода PaintTo (данный метод реализован у наследников TWinControl).
Однако, TGraphicControl может обрабатывать сообщения, следовательно можно отправить ему WM_PAINT и подсунуть нужный канвас (HDC).
Напрямую отрисовать на TImage у меня не получилось, но с временным битмапом отрабатывает на ура:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create; // создаем временный битмап
  bmp.Assign(Image1.Picture); // загружаем в него содержимое TImage
  MoveWindowOrg(bmp.Canvas.Handle, 120, 30);  // устанавливаем X и Y отрисовки напдписи
  Label1.Perform(WM_PAINT, bmp.Canvas.Handle, 0); // отрисовываем надпись
  image1.Picture.Assign(bmp); // загружаем в TImage содержимое временного битмапа
  bmp.Free;  // уничтожаем временный битмап
end;
У меня не установлен TJvlabel, в примере отрисовка кастомного TLabel.

Собственно, это что-то примитивной реализации метода PaintTo для TGraphicControl, который можно доработать под себя.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.

Последний раз редактировалось dr. F.I.N., 09.03.2021 в 20:11.
Ответить с цитированием
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение:
crazyman (10.03.2021)
  #6  
Старый 10.03.2021, 17:49
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

у меня не работает Ваш пример с обычным Label
Ошибка Cannot assign a Tpicture to a Tbitmap
Ответить с цитированием
  #7  
Старый 10.03.2021, 17:54
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

поместил на имадж бмп картинку, после буттон клик появляется точка на картинке
Ответить с цитированием
  #8  
Старый 10.03.2021, 17:55
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

Цитата:
Сообщение от dr. F.I.N.
Иерархия такая: TGraphicControl -> TJvGraphicControl -> TJvlabel
Следовательно TJvlabel не имеет метода PaintTo (данный метод реализован у наследников TWinControl).
Однако, TGraphicControl может обрабатывать сообщения, следовательно можно отправить ему WM_PAINT и подсунуть нужный канвас (HDC).
Напрямую отрисовать на TImage у меня не получилось, но с временным битмапом отрабатывает на ура:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create; // создаем временный битмап
  bmp.Assign(Image1.Picture); // загружаем в него содержимое TImage
  MoveWindowOrg(bmp.Canvas.Handle, 120, 30);  // устанавливаем X и Y отрисовки напдписи
  Label1.Perform(WM_PAINT, bmp.Canvas.Handle, 0); // отрисовываем надпись
  image1.Picture.Assign(bmp); // загружаем в TImage содержимое временного битмапа
  bmp.Free;  // уничтожаем временный битмап
end;
У меня не установлен TJvlabel, в примере отрисовка кастомного TLabel.

Собственно, это что-то примитивной реализации метода PaintTo для TGraphicControl, который можно доработать под себя.
заработало, только размер текста лайбл не пропорционален перерисованному
Ответить с цитированием
  #9  
Старый 10.03.2021, 17:58
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

размеры разные, но я думаю решу этот вопрос, спасибо

Последний раз редактировалось crazyman, 10.03.2021 в 18:01.
Ответить с цитированием
  #10  
Старый 10.03.2021, 18:00
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Выкладываю тестовый проект.
Вложения
Тип файла: zip TEST.zip (253.3 Кбайт, 0 просмотров)
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #11  
Старый 10.03.2021, 18:06
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Цитата:
Сообщение от crazyman
размеры разные, но я думаю решу этот вопрос, спасибо
Возможно у Image установлено свойство Stratched в True. Тогда картинка растягивается. У меня такого эффекта нет.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #12  
Старый 10.03.2021, 18:12
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

Цитата:
Сообщение от crazyman
размеры разные, но я думаю решу этот вопрос, спасибо
Разобрался, если у Image proportional:=true, тогда размер перерисованного Label уменьшается. Отсюда вопрос. Можно ли сохранить пропорции перерисованного Label в Image c proportional:=true?
Ответить с цитированием
  #13  
Старый 10.03.2021, 18:13
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

Цитата:
Сообщение от dr. F.I.N.
Возможно у Image установлено свойство Stratched в True. Тогда картинка растягивается. У меня такого эффекта нет.
Разобрался, если у Image proportional:=true, тогда размер перерисованного Label уменьшается. Отсюда вопрос. Можно ли сохранить пропорции перерисованного Label в Image c proportional:=true?
Ответить с цитированием
  #14  
Старый 10.03.2021, 18:17
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

ну намудрить можно что угодно. вопрос - стоит ли оно того?
Если с этим не заморачиваться, то я бы привел изображение в Image сразу к нужному масштабу и пропорции. Тогда не придется мудрить с дополнительными преобразованиями.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #15  
Старый 10.03.2021, 18:19
crazyman crazyman вне форума
Новичок
 
Регистрация: 22.04.2012
Сообщения: 99
Репутация: 10
По умолчанию

Цитата:
Сообщение от dr. F.I.N.
ну намудрить можно что угодно. вопрос - стоит ли оно того?
Если с этим не заморачиваться, то я бы привел изображение в Image сразу к нужному масштабу и пропорции. Тогда не придется мудрить с дополнительными преобразованиями.
Да но картинка большая и в реальном размере не поместится на форму. Тем не менее спасибо, буду мудрить)

Последний раз редактировалось crazyman, 10.03.2021 в 18:23.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:13.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter