Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

Прозрачность   Найти похожие ветки 

 
Calibr ©   (2006-07-26 21:43) [0]

Как сделать чтоб форма была прозрачной, а какой нибудь компонент на ней типа TWinControl был не прозрачным?


 
Джо ©   (2006-07-26 21:47) [1]

Самое, ИМХО, легкое в реализации — использование регионов и операций над ними.


 
Calibr ©   (2006-07-26 21:55) [2]

А по подробнее???


 
Джо ©   (2006-07-26 21:59) [3]

> [2] Calibr ©   (26.07.06 21:55)
> А по подробнее???

CreateRectRgn
CombineRgn
SetWindowRgn


 
PSPF2003 ©   (2006-07-26 22:01) [4]

unit unit1;
interface
uses    Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg, Buttons, XPMan;
type
 TForm1 = class(TForm)
   SpeedButton1: TSpeedButton;
   XPManifest1: TXPManifest;
   procedure SpeedButton1Click(Sender: TObject);
   // это просто кнопка на форме - для демонстрации
 protected
   procedure RebuildWindowRgn;
   procedure Resize; override;
 public
   constructor Create(AOwner: TComponent); override;
 end;
var
 Form1 : TForm1;
implementation
// ресурс этой формы
{$R *.DFM}

{ Прозрачная форма }
constructor TForm1.Create(AOwner: TComponent);
begin
 inherited;
 // убираем сколлбары, чтобы не мешались
 // при изменении размеров формы
 HorzScrollBar.Visible:= False;
 VertScrollBar.Visible:= False;
 // строим новый регион
 RebuildWindowRgn;
end;

procedure TForm1.Resize;
begin
 inherited;
 // строим новый регион
 RebuildWindowRgn;
end;

procedure TForm1.RebuildWindowRgn;
var
 FullRgn, Rgn: THandle;
 ClientX, ClientY, I: Integer;
begin
 // определяем относительные координаты клиенской части
 ClientX:= (Width - ClientWidth) div 2;
 ClientY:= Height - ClientHeight - ClientX;
 // создаем регион для всей формы
 FullRgn:= CreateRectRgn(0, 0, Width, Height);
 // создаем регион для клиентской части формы
 // и вычитаем его из FullRgn
 Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth,
ClientY + ClientHeight);
 CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);
 // теперь добавляем к FullRgn регионы каждого контрольного элемента
 for I:= 0 to ControlCount -1 do
   with Controls[I] do begin
     Rgn:= CreateRectRgn(ClientX + Left, ClientY + Top, ClientX +
Left + Width, ClientY + Top + Height);
     CombineRgn(FullRgn, FullRgn, Rgn, rgn_Or);
   end;
 // устанавливаем новый регион окна
 SetWindowRgn(Handle, FullRgn, True);
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Close;
end;

end.


 
Джо ©   (2006-07-26 22:03) [5]

Основная идея:
var
 FormRgn,
 Rgn: HRGN;
...
 // создаем прямоугольный регион
 // который должен остаться видимым на форме
 Rgn := CreateRectRgn (0,0,100,100);

 // создаем регион по текущему размеру формы
 FormRgn := CreateRectRgn(0,0,Width,Height);

 // вычитаем из региона формы маленький регион
 CombineRgn(FormRgn,PanelRgn,FormRgn,RGN_AND);

 // удаляем уже ненужный регион
 DeleteObject (Rgn);

 // задаем для формы новый регион отображения
 SetWindowRgn(Handle,FormRgn,True);


 
Джо ©   (2006-07-26 22:18) [6]

> [5] Джо ©   (26.07.06 22:03)

Перемудрил я тут, можно и проще без всяких CombineRgn, а сразу "маленький" регион передавать в SetWindowRgn. Сорри, спешка и невнимательность :(


 
Calibr ©   (2006-07-26 22:33) [7]

Нет, я имею ввиду чтоб форма была не полностью прозрачной, а например ее AlphaBlendValue = 120, а компоненты не прозрачны?


 
Мефисто   (2006-07-26 23:04) [8]

http://delphimaster.net/view/2-1153863154/

судя по эксперементам изучать принцип работы SetLayeredWindowAttributes

procedure TCustomForm.SetLayeredAttribs;


 
Степан   (2006-07-27 10:21) [9]

Помоему, сделать это будет довольно таки тяжеловато... это конечно если это ВООБЩЕ ВОЗМОЖНО?


 
Ketmar ©   (2006-07-27 14:48) [10]

возможно. но нафига?


 
antonn ©   (2006-07-27 20:46) [11]

можно заюзать updatelayeredwindow()
но только заниматься перерисовкой нужно будет полностью "вручную"



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
1-1153808383
atruhin
2006-07-25 10:19
2006.09.10
Модальное окно в MDI приложении


2-1156232265
BronOS
2006-08-22 11:37
2006.09.10
Удаление строки из StringGrid


15-1156175964
Чапаев
2006-08-21 19:59
2006.09.10
Photoshop. Прозрачность.


2-1155804709
UMU
2006-08-17 12:51
2006.09.10
Вычесть дату


2-1156257201
J Cara
2006-08-22 18:33
2006.09.10
Вопрос по idHTTP1.Get





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский