Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.039 c
5-1139313370
Нулевой
2006-02-07 14:56
2006.09.10
Как добавить BS_FLAT в BitBtn и GroupBox, CheckBox.


3-1151284286
antoxa2005
2006-06-26 05:11
2006.09.10
Кто-нибудь работал с FB ч-з ODBC драйвер?


2-1156164174
XTD
2006-08-21 16:42
2006.09.10
Как создать дочернее окно?


15-1155810587
besevl
2006-08-17 14:29
2006.09.10
Прошу совета


2-1156148882
Очень грустный человек
2006-08-21 12:28
2006.09.10
Delphi и работа с DBF





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский