![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свойство Transperent в компоненте Panel. [D6, WinXP]
SergV © (2004-11-12 17:40:00)Есть компонент наследник TPanel, как добавить этому компоненту свойство Transparent. Не разу не писал компоненты, а это свойство ну очень нужно.
0xFF0A4E (2004-12-14 02:30:00) [1]Ну не бросайте темку !!!!
Мне тоже очень нужно слепить комонент (наследник TCustomControl,or TWinControl) со свойством Transparent !!!!
помогите, 2 недели уже гемороюсь ....
thnx !!!!
SV (2004-11-25 19:55:00) [2]В общем с панелью не чего не вышло, переделал на Image, помучался, но зато работает. А спанелью ни как, не делаетс прозрачной хоть тресни её чем. Вообщем тема закрыта.
ЮЮ (2004-11-23 05:36:00) [3]> FTimer: TTimer; выдает что не объявленный индитификатор.
Ты знаешь, что TTimer находится в иодуле ExtCtrls? А твой TMyCustomPanel - нет! Укажи этот модуль в uses
SergeV (2004-11-22 21:14:00) [4]Это уже чтото, спасибо jack128. А то какой день голову ломаю, а не чего не идет. Попробую завтра, седня нет времени. Может еще кто подскажет как таймер добавить к Label, пробовал стандартно типа FTimer: TTimer; выдает что не объявленный индитификатор.
jack128 (2004-11-20 20:38:00) [5]icWasya © (15.11.04 11:41) [8]
Дело в том, что панень игнорирует флаг csOpaque, так что помимо твоего кода еще придется переписывать весь метод Paint, как я уже говорил..
Примерно так:
TMyCustomPanel = class(TCustomPanel)
protected
procedure Paint; override;
end;
procedure TMyCustomPanel.Paint;
const
Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
Rect: TRect;
TopColor, BottomColor: TColor;
FontHeight: Integer;
Flags: Longint;
procedure AdjustColors(Bevel: TPanelBevel);
begin
TopColor := clBtnHighlight;
if Bevel = bvLowered then TopColor := clBtnShadow;
BottomColor := clBtnShadow;
if Bevel = bvLowered then BottomColor := clBtnHighlight;
end;
begin
Rect := GetClientRect;
if BevelOuter <> bvNone then
begin
AdjustColors(BevelOuter);
Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
end;
Frame3D(Canvas, Rect, Color, Color, BorderWidth);
if BevelInner <> bvNone then
begin
AdjustColors(BevelInner);
Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
end;
with Canvas do
begin
Brush.Color := Color;
if csOpaque in ControlStyle then
FillRect(Rect);
Brush.Style := bsClear;
Font := Self.Font;
FontHeight := TextHeight('W');
with Rect do
begin
Top := ((Bottom + Top) - FontHeight) div 2;
Bottom := Top + FontHeight;
end;
Flags := DT_EXPANDTABS or DT_VCENTER or Alignments[FAlignment];
Flags := DrawTextBiDiModeFlags(Flags);
DrawText(Handle, PChar(Caption), -1, Rect, Flags);
end;
end;
SergeV (2004-11-18 19:42:00) [6]Thanks! Ща попробую.
icWasya (2004-11-15 11:41:00) [7]что-то типа так
procedure TXXXX.Transp arent(Value: Boolean);
begin
if FTransparent = Value then Exit;
FTransparent := Value;
if Value then
ControlStyle := ControlStyle - [csOpaque]
else
ControlStyle := ControlStyle + [csOpaque];
Invalidate;
end;
SergeV (2004-11-14 13:45:00) [8]Не получятся шото, пробовал так и так, не действует. Свойство зто появилось, да только всегда в true стоит,и не переключается. Содрал с исходника формы свойства TransparentColor и AlphaBlend, все переключается, да только не работает и это. Может к Panel'и зти свойства не подходят? Може кто знает какой исходник или готовый компоент типа Panel с Transparent?
SergV (2004-11-12 19:58:00) [9]Вроде разобрался, попробую установить.
Спасибо за помощь.
SergV (2004-11-12 19:22:00) [10]Ввёл я эти Сtrl-Shift-C, а щастья не видать. Добавилось кое шо, да одна ошибка.
function TPLNClock.GetTransparent: boolean;
begin
FTransporent := Value; / пишет что не указанный индитификатор
Invalidate;
end;
procedure TPLNClock.SetTransparent(const Value: boolean);
begin
/ а что здесь
end;
procedure TPLNClock.Transporent(Value: Boolean);
begin
/и здесь
end;
В строке *property Transparent: boоlean read GetTransparent write SetTransparent;* добавил *default false*, не помогло.
Что не так.
Pentium133 (2004-11-12 18:29:00) [11]
> property Transparent: bolean read GetTransparent write SetTransparent;
Приче сразу после ввода этой строки нажми Сtrl-Shift-C и будет щастье
jack128 (2004-11-12 18:24:00) [12]Pentium133 © (12.11.04 17:44) [1]
Вот только с реализацией наверно помучеешся
да в общем то с технической точки зрения как раз таки ничего сложного и нету. А вот с иделогической.. Копировать весь метод Paint ради изменения пары строчек..
SergV (2004-11-12 18:09:00) [13]Я тут пробовал так:
private
{ Private declarations }
FTransporent: Boolean;
....
protected
{ Protected declarations }
procedureTrahsporent(Value: Boolean);
....
published
{ Published declarations }
propertyTransporent: Boolean readTransporent writeTransporent defaultTrue; (На зтой строке выдаёт ошибку)
....
implementation
{$R *.res}
....
procedure TClock.Transporent(Value: Boolean);
begin
Transporent := Value;
Invalidate;
end;
....
Попробую с *property Transparent: bolean read GetTransparent write SetTransparent*, спасибо за подсказку Pentium133 ©. Может еще шо не так в моём коде.
Pentium133 (2004-11-12 17:44:00) [14]
property Transparent: bolean read GetTransparent write SetTransparent
Вот только с реализацией наверно помучеешся