Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.05.2017, 08:19
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию HwndWrapper and Delphi

Есть такая вещь, которая создает хад над окном( грубо говоря TextOut, но с привязкой к форме) Как его подружить с делфи? или мб аналоги есть? ничего толкового в инете не нашел. Наверняка через директх можно сделать, но как это все грамотно называется?
https://msdn.microsoft.com/en-us/lib...ndwrapper.aspx
Ответить с цитированием
  #2  
Старый 12.05.2017, 14:51
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

По ссылке полный набор для апишного управления сабжем, другой вопрос - для чего? Может сможете попроще объяснить, что требуется
Ответить с цитированием
  #3  
Старый 12.05.2017, 18:06
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Alegun
По ссылке полный набор для апишного управления сабжем, другой вопрос - для чего? Может сможете попроще объяснить, что требуется
Мне нужно Создать хад над чужим окном, объяснить что такое хад мне не просто Это как бы невидимая форма, но С видимыми контроламами (с лейблами в основном), но чтобы в местах где нету контролов, чтобы никакого объекта (хендла) не было. Опытным путем, я нашел, что аналоги используют класс выше, но как с ним работать не очень понимаю. То есть я его создам,а как наполнить - без понятия. Примеров по этому классу даже не нашел (кроме ссылки выше)
сумбурно вышло, но надеюсь, хоть немного понятно

Последний раз редактировалось nixon232, 12.05.2017 в 18:09.
Ответить с цитированием
  #4  
Старый 12.05.2017, 19:52
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да нету в делфи проблем при работе с регионами, можно перекрыть и вывести с их помощью всё что угодно и как угодно
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
nixon232 (13.05.2017)
  #5  
Старый 13.05.2017, 11:37
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Спасибо, на вскидку это именно то что нужно. Ключевой момент: Рисуется дырявая звезда и дырка именно сквозная,а не прозрачная
Код:
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  
Старый 13.05.2017, 13:38
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Давно-давно я уже собирал кому-то в личке подобное, помнится там была "дырявая" форма над формой-имиджем с переключением фокуса между ними, с кликом на "не дырявые" фрагменты, занятые кнопками и собранная из полирегионов, типа слоистой карты местности с подключаемым доп. функционалом, обыскался, но увы, сборки так и не нашёл, если откопаю, выложу

З.Ы. 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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter