Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свойство 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

Вот только с реализацией наверно помучеешся


Наверх

Титульная страница Поиск, карта сайта Написать письмо