|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите исправить модуль обводки текста (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(слева), то всё работает. Последний раз редактировалось Ankor, 24.12.2011 в 01:57. |
#2
|
||||
|
||||
Тут все просто, добавь в модуль эти 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
|
|||
|
|||
попробуй так:
Код:
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
|
|||
|
|||
Пробовал оба ваших варианта, не работает, текст обводки(черный) остаётся слева, а Текст Label по середине(
Посмотрите опять же мой пример, если не трудно. |
#5
|
||||
|
||||
Так у меня почему работает?
|
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Ankor (24.12.2011)
|
#6
|
||||
|
||||
Цитата:
Вот твой пример: Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 24.12.2011 в 03:06. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Ankor (24.12.2011)
|
#7
|
||||
|
||||
Цитата:
|
#8
|
||||
|
||||
Ты не понял, в аттаче один юнит LabelShadowUnit, а в первой сообщении приведён усечённый вариант.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
|||
|
|||
Спасибо огромное, Ваш пример работает!
Добавил WordWrap:=self.WordWrap; и // убрал из функции procedure TLabel.AddShadowText(widthh: byte; colorr: integer); Незнаю, зачем вы их поставили, главное что работает! Премного благодарен. |
#10
|
||||
|
||||
Цитата:
|
#11
|
||||
|
||||
Можно, но и сейчас всё на месте.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#12
|
||||
|
||||
А, так ты о конструкторе/деструкторе? Сорри, не заметил. Но без конструктора вообще-то фатал вышибет, а не тень.
|
#13
|
||||
|
||||
Если честно, то за такой юнит в угол ставить нужно.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#14
|
|||
|
|||
Да этот юнит я искал по всему инету, чтобы сделать обводку текста, чтобы читабильнее была на разных картинках, мне сделали такой модуль, и я кстати очень доволен, не откажусь конечно и от более проф. варианта, если будут такие.
В идеале конечно хотелось бы чётче обведенный текст чтоб был, как на картинке: Последний раз редактировалось Ankor, 24.12.2011 в 05:44. |
#15
|
||||
|
||||
Для этого используются функции:
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |