|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
HwndWrapper and Delphi
Есть такая вещь, которая создает хад над окном( грубо говоря TextOut, но с привязкой к форме) Как его подружить с делфи? или мб аналоги есть? ничего толкового в инете не нашел. Наверняка через директх можно сделать, но как это все грамотно называется?
https://msdn.microsoft.com/en-us/lib...ndwrapper.aspx |
#2
|
||||
|
||||
По ссылке полный набор для апишного управления сабжем, другой вопрос - для чего? Может сможете попроще объяснить, что требуется
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
Цитата:
сумбурно вышло, но надеюсь, хоть немного понятно Последний раз редактировалось nixon232, 12.05.2017 в 18:09. |
#4
|
||||
|
||||
Да нету в делфи проблем при работе с регионами, можно перекрыть и вывести с их помощью всё что угодно и как угодно
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nixon232 (13.05.2017)
|
#5
|
|||
|
|||
Спасибо, на вскидку это именно то что нужно. Ключевой момент: Рисуется дырявая звезда и дырка именно сквозная,а не прозрачная
Код:
procedure TForm1.FormCreate(Sender: TObject); var ap: array [1..5] of TPoint; r: hRGN; begin ap [1] := Point (Width div 2, 0); ap [2] := Point (Width div 3 * 2, Height); ap [3] := Point (0, Height div 3); ap [4] := Point (Width, Height div 3); ap [5] := Point (Width div 3, Height); r := CreatePolygonRgn (ap, 5, ALTERNATE); try SetWindowRgn (Handle, r, TRUE); finally DeleteObject (r); end; end; |
#6
|
||||
|
||||
Давно-давно я уже собирал кому-то в личке подобное, помнится там была "дырявая" форма над формой-имиджем с переключением фокуса между ними, с кликом на "не дырявые" фрагменты, занятые кнопками и собранная из полирегионов, типа слоистой карты местности с подключаемым доп. функционалом, обыскался, но увы, сборки так и не нашёл, если откопаю, выложу
З.Ы. drkb Вот пример "дырявой" формы-имиджа из регионов где есть картинка Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons; type TForm1 = class(TForm) Image3: TImage; Image2: TImage; Image1: TImage; procedure FormCreate(Sender: TObject); protected procedure ImagesWindowRgn; public end; var Form1: TForm1; implementation uses Types; {$R *.dfm} procedure TForm1.ImagesWindowRgn; var FullRgn, Rgn: THandle; ClientX, ClientY, i , k: integer; x, y, firstx, cl : integer; last : boolean; temprgn : hrgn; Begin k:=0; ClientX := (Width - ClientWidth) div 2; ClientY := Height - ClientHeight - ClientX; FullRgn:=CreateRectRgn(0,0,Width,Height); Rgn:=CreateRectRgn(ClientX,ClientY,ClientX+ClientWidth,ClientY+ClientHeight); CombineRgn(FullRgn,FullRgn,Rgn,RGN_DIFF); 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); //*************************************************************************************** if (TImage(Controls[i]).Picture) <> nil then with TImage(Controls[i]) do Begin if Transparent then cl := Picture.Bitmap.Canvas.Pixels [0, 0]; for y:=0 to Picture.Bitmap.height-1 do begin firstx:=0; last:=false; for x:=0 to Picture.Bitmap.width-1 do if(abs( Picture.Bitmap.canvas.pixels[x,y] - cl)>0) and (x<>pred( Picture.Bitmap.width)) then begin if not last then begin last:=true; if Transparent then firstx:=x; end; end else if last then begin last:=false; temprgn:=CreateRectRgn( firstx+left, y+Top, left+x, Top+y+1); // temprgn:=createrectrgn(firstx,y,x,y+1); CombineRgn(FullRgn,FullRgn,temprgn,RGN_or); deleteobject(temprgn); end; end; end; end; SetWindowRgn(Handle,FullRgn,true); end; procedure TForm1.FormCreate(Sender: TObject); begin HorzScrollbar.Visible := false; VertScrollbar.Visible := false; BorderStyle:=bsNone; ImagesWindowRgn; end; end. Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 13.05.2017 в 14:01. |