Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2023, 21:07   #21
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 126
По умолчанию

2 macomix,
Цитата:
2) Можно обойтись одной переменной Count. Если её значение = 0, тогда Collect false иначе true. Значения в прямой зависимости. Достаточно оставить только Count
- точно так. Спасибо!
Цитата:
3) Вы уже прошли по X Count пикселей, но вычислив X2 = X1 + Count + 1 вы отложите по X пиксели в другую сторону (в сторону тех, что ещё не просматривали). Надо исправить на X1 - Count
- это я сам понял, ещё до того как увидел ваш ответ.
Цитата:
Код:
Rgn2:=CreateRectRgn(X - Count, Y, X, Y + 1);
- Благодарю!
hexor_boo вне форума Ответить с цитированием
Старый 01.05.2023, 21:07   #22
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

hexor_boo,
Код:
procedure TfrmMain.btnGetRgnClick(Sender: TObject);
var
 X            : Integer;
 Y            : Integer;
 X1           : Integer;
 Y1           : Integer;
 X2           : Integer;
 Y2           : Integer;
 RgnDest      : HRGN; // Вот эта переменная
 Rgn2         : HRGN;
 XBeadCollect : Boolean;
 XBeadsCount  : Integer;
begin
 RgnDest:=0;

 If (RgnDest=0) Then // Вот тут зачем проверка? Это локальная переменная, двумя строками выше, которой и так присвоили 0. Этот код не в цикле. Так зачем проверять очевидное?
  Begin
   RgnDest:=CreateRectRgn(391, 0, 392, 1);
  End;

Последний раз редактировалось macomics; 01.05.2023 в 21:10.
macomics вне форума Ответить с цитированием
Старый 01.05.2023, 21:19   #23
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 126
Радость

Совместными усилиями решена задача отрисовки региона "9-конечная звезда" по картинке с обрезкой формы под эту звезду. Ура!

Код:
procedure TfrmMain.btnGetRgnClick(Sender: TObject);
var
 X            : Integer;
 Y            : Integer;
 RgnDest      : HRGN;
 Rgn2         : HRGN;
 XBeadsCount  : Integer;

  Procedure UseBeads;
   Begin
    //Use beads code begin
    If (RgnDest=0) Then
      Begin
       RgnDest:=CreateRectRgn(X-XBeadsCount, Y, X, Y+1);
      End
     Else
      Begin
       Rgn2:=CreateRectRgn(X-XBeadsCount, Y, X, Y+1);
       CombineRgn(RgnDest, RgnDest, Rgn2, rgn_Or);
       DeleteObject(Rgn2);
      End;
    //Use beads code end
    XBeadsCount:=0;
   End;

begin
 RgnDest:=0;
 XBeadsCount:=0;

  For Y:=0 To imgStar.Height-1 Do
   Begin
     For X:=0 To imgStar.Width-1 Do
      Begin
      
        If (imgStar.Canvas.Pixels[X, Y]<>clWhite) Then
         Begin
           If (XBeadsCount=0) Then
            Begin
             XBeadsCount:=1;
            End
           Else
            If (XBeadsCount<(imgStar.Width-1)) Then
             Inc(XBeadsCount, 1)
            Else
             UseBeads;
         End
        Else
          If (XBeadsCount>0) Then
           UseBeads;

      End; //For X
   End; //For Y

  Try
   SetWindowRgn(Handle, RgnDest, True);
  Finally
   DeleteObject(RgnDest);
  End;

end;
hexor_boo вне форума Ответить с цитированием
Старый 01.05.2023, 21:27   #24
hexor_boo
Разъяснятор
Форумчанин
 
Аватар для hexor_boo
 
Регистрация: 21.04.2022
Сообщений: 126
Смех

Немного оффтоп, однако перекликается с той же задачей. Оказывается для получения практически такого же результата с нулевой задержкой по времени отрисовки достаточно:
Код:
procedure TfrmMain.FormShow(Sender: TObject);
begin
 frmMain.TransparentColorValue:=clWhite;
 frmMain.TransparentColor:=True;
end;
Ржунемогу))) И в этом случае через прозрачные области формы можно как и в случае с регионами кликать по иконкам на рабочем столе (это не было озвучено, как условие задачи, но было нужно).
hexor_boo вне форума Ответить с цитированием
Старый 01.05.2023, 21:29   #25
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Так я же это вам прислал ещё в #5 ответе
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование SDK (C++) в Delphi dalx Фриланс 2 28.04.2022 00:04
Использование Delphi DLL в PHP коде Adult_Master Общие вопросы Delphi 5 27.10.2015 18:17
Использование ЭЦП в Delphi tarakan1983 Общие вопросы Delphi 3 30.03.2015 21:39
Использование библиотек в Delphi Konstantin_V Софт 31 22.02.2010 21:59
HRGN сохранение-загрузка? Comer_Jus Общие вопросы Delphi 5 21.05.2008 20:12