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