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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.12.2011, 01:55
Ankor Ankor вне форума
Новичок
 
Регистрация: 19.08.2011
Сообщения: 68
Версия Delphi: XE2, XE3
Репутация: 10
По умолчанию Помогите исправить модуль обводки текста (Label)

Здравствуйте уважаемые программисты.
Спасибо за ваш форум, очень толковый, и хорошо объясняют!
Вот решил обратиться к вам, так как автор модуля помочь не может.

Есть модуль LabelShadowUnit, который делает обводку(контур) текста Label.
Но если поставить св-ва у Label: Alignment - taCenter, то обводка остаётся слева, если WordWrap, то тоже не переносится как надо.

Как унаследовать эти св-ва(Alignment и WordWrap), посмотрите пожалуйста, выкладываю код модуля и проект:

Код:
unit LabelShadowUnit;

interface
uses
   SysUtils, Classes, Controls, StdCtrls;
type
  TLabel2 = class(TLabel);
  TLabel = class(TLabel2)
    procedure AddShadow(x: integer = 3; y: integer = 1; colorr : integer = 0);
    procedure AddShadowText(widthh : byte = 1; colorr : integer = 0);
    procedure ClearShadow;
  end;

implementation

{ TLabel }

procedure TLabel.AddShadow(x: integer = 3; y: integer = 1; colorr : integer = 0);
begin
  with TLabel.Create(self) do begin
    parent:=self.Parent;
    font:=self.Font;
    Top:=self.Top+y;
    Left:=self.Left+x;
    Font.Color:=colorr;
    caption:=self.Caption;
    transparent:=true;
  end;
  self.Transparent:=true;
  self.BringToFront;
end;

procedure TLabel.AddShadowText(widthh: byte; colorr: integer);
begin
  ClearShadow;
  // прямоугольник
  self.AddShadow(widthh,0, colorr);
  self.AddShadow(-1*widthh,0, colorr);
  self.AddShadow(0,widthh, colorr);
  self.AddShadow(0,-1*widthh, colorr);
  // по бокам
  self.AddShadow(widthh,widthh, colorr);
  self.AddShadow(-1*widthh,-1*widthh, colorr);
  self.AddShadow(-1*widthh,widthh, colorr);
  self.AddShadow(widthh,-1*widthh, colorr);
end;

procedure TLabel.ClearShadow;
begin
  self.DestroyComponents;
end;





end.


Если свойство Alignment у Label1 поставить taLeftJustify(слева), то всё работает.
Вложения
Тип файла: rar Обводка Label.rar (93.0 Кбайт, 14 просмотров)

Последний раз редактировалось Ankor, 24.12.2011 в 01:57.
Ответить с цитированием
  #2  
Старый 24.12.2011, 02:50
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Тут все просто, добавь в модуль эти 4 строки, и будет тебе счастье...
Код:
procedure TLabel.AddShadow(x: integer = 3; y: integer = 1; colorr : integer = 0);
var sh: TLabel;
begin
  sh:=TLabel.Create(self.Owner);
  with sh do begin
    Alignment:=self.Alignment;
    Autosize:=self.AutoSize;
    parent:=self.Parent;
    font:=self.Font;
    Top:=self.Top+y;
    Left:=self.Left+x;
    width:=self.width;
    height:=self.Height;
    Font.Color:=colorr;
    caption:=self.Caption;
    transparent:=true;
    end;
  self.Transparent:=true;
  self.BringToFront;
  shad.Add(sh);
end;

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

попробуй так:
Код:
procedure TLabel.AddShadow(x: integer = 3; y: integer = 1; colorr : integer = 0);
begin
  with TLabel.Create(self) do begin
    parent:=self.Parent;
    font:=self.Font;
    Top:=self.Top+y;
    Left:=self.Left+x;
    Font.Color:=colorr;
    caption:=self.Caption;
    transparent:=true;
    Alignment := Self.Alignment;
  end;
  self.Transparent:=true;
  self.BringToFront;
end;

С WordWrap можно попробовать так же, но там ситуация посложнее.
Ответить с цитированием
  #4  
Старый 24.12.2011, 02:58
Ankor Ankor вне форума
Новичок
 
Регистрация: 19.08.2011
Сообщения: 68
Версия Delphi: XE2, XE3
Репутация: 10
По умолчанию

Пробовал оба ваших варианта, не работает, текст обводки(черный) остаётся слева, а Текст Label по середине(

Посмотрите опять же мой пример, если не трудно.
Ответить с цитированием
  #5  
Старый 24.12.2011, 03:01
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Так у меня почему работает?
Вложения
Тип файла: rar Обводка Label.rar (98.0 Кбайт, 15 просмотров)
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
Ankor (24.12.2011)
  #6  
Старый 24.12.2011, 03:03
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Ankor
Пробовал оба ваших варианта, не работает, текст обводки(черный) остаётся слева, а Текст Label по середине(

Посмотрите опять же мой пример, если не трудно.
Выложил ты один модуль, а здесь приводишь другой. Так с каким работаешь? У меня нормально работает.
Вот твой пример:
Вложения
Тип файла: rar label.rar (6.1 Кбайт, 12 просмотров)
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 24.12.2011 в 03:06.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Ankor (24.12.2011)
  #7  
Старый 24.12.2011, 03:08
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Выложил ты один модуль, а здесь приводишь другой. Так с каким работаешь? У меня нормально работает
Топик то другой
Ответить с цитированием
  #8  
Старый 24.12.2011, 03:14
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ты не понял, в аттаче один юнит LabelShadowUnit, а в первой сообщении приведён усечённый вариант.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 24.12.2011, 03:14
Ankor Ankor вне форума
Новичок
 
Регистрация: 19.08.2011
Сообщения: 68
Версия Delphi: XE2, XE3
Репутация: 10
По умолчанию

Спасибо огромное, Ваш пример работает!

Добавил WordWrap:=self.WordWrap; и // убрал из функции
procedure TLabel.AddShadowText(widthh: byte; colorr: integer);

Незнаю, зачем вы их поставили, главное что работает!
Премного благодарен.
Ответить с цитированием
  #10  
Старый 24.12.2011, 03:20
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
Сообщение от angvelem
Ты не понял, в аттаче один юнит LabelShadowUnit, а в первой сообщении приведён усечённый вариант.
Подстава. У меня нет такого в первом. Или аттачи тоже редактировать можно?
Ответить с цитированием
  #11  
Старый 24.12.2011, 03:21
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Можно, но и сейчас всё на месте.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #12  
Старый 24.12.2011, 03:27
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

А, так ты о конструкторе/деструкторе? Сорри, не заметил. Но без конструктора вообще-то фатал вышибет, а не тень.
Ответить с цитированием
  #13  
Старый 24.12.2011, 03:30
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если честно, то за такой юнит в угол ставить нужно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #14  
Старый 24.12.2011, 03:40
Ankor Ankor вне форума
Новичок
 
Регистрация: 19.08.2011
Сообщения: 68
Версия Delphi: XE2, XE3
Репутация: 10
По умолчанию

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

В идеале конечно хотелось бы чётче обведенный текст чтоб был, как на картинке:
Изображения
Тип файла: jpg 400.jpg (1.3 Кбайт, 17 просмотров)

Последний раз редактировалось Ankor, 24.12.2011 в 05:44.
Ответить с цитированием
  #15  
Старый 24.12.2011, 15:35
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Для этого используются функции:
Цитата:
StrokeAndFillPath
StrokePath
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter