Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать дырку в форме, пример из DRKB не работает 
:(
    Опции темы
Scotch
Дата 24.9.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



Всем привет

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

[Error] Unit1.pas(43): Undeclared identifier: 'Pts'

действительно непонятно что это за фрукт, плюс на эту команду "CreatePolygonRgn" не могу вызвать справку в Delphie.  Можете объяснить как это должно работать?



Код

procedure TForm1.Button4Click(Sender: TObject);
var
HRegion1, Hreg2, Hreg3: THandle;
Col: TColor;
begin
ShowMessage ('Ready for a real crash?');
Col := Color;
Color := clRed;
PlaySound ('boom.wav', 0, snd_sync);
HRegion1 := CreatePolygonRgn (Pts,
   sizeof (Pts) div 8,
   alternate);
SetWindowRgn (
   Handle, HRegion1, True);
ShowMessage ('Now, what have you done?');
Color := Col;
ShowMessage ('Вам лучше купить новый монитор');
end;


Озадачен такой проблемкой - хочу сделать форму нестандартного вида, как бы намертво склеенную из 2-х прямоугольных форм (например, одинаковых), но одна чуть выше и правее другой (наложены одна на другую). Не проблема написать обработчик перемещения формы и, соответсвенно, привязать координаты другой к этим перемещениям, но есть проблема - форма которая левее не должна становиться активной и перекрывать собой форму правее.  Т.е. правая форма всегда должна оставаться активной, даже если курсор мыши перемещает левую форму...

Помогите разобраться, можно ли и как это обойти?

Это сообщение отредактировал(а) Alexeis - 26.9.2007, 19:20
PM MAIL   Вверх
aktuba
Дата 24.9.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Перехватывай OnActive... А почему нельзя сделать просто форму нестандартной формы, обрезанную по какому-то региону?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Vetos
Дата 25.9.2007, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: 1
Всего: 4



Так у тебя хотя бы где нибудь описывается var Pts, а так конечно будет выдавать ету ошибку, прочти внимательней пример smile  


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Rodman
Дата 25.9.2007, 08:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 1
Всего: 122



Код

procedure TForm1.Button1Click(Sender: TObject);
var
  HRegion1, Hreg2, Hreg3: THandle;
  Col: TColor;
  Pts:array  [0..2] of TPoint;
begin
  ShowMessage ('Ready for a real crash?');
  Col := Color;
  Color := clRed;
//  PlaySound ('boom.wav', 0, snd_sync);
  Pts[0] := Point(135-140, 40);
  Pts[1] := Point(135+140, 40);
  Pts[2] := Point(135, 140);
  HRegion1 := CreatePolygonRgn (Pts,  sizeof (Pts) div 8, alternate);
  SetWindowRgn (Handle, HRegion1, True);
  ShowMessage ('Now, what have you done?');
  Color := Col;
  ShowMessage ('Âàì ëó÷øå êóïèòü íîâûé ìîíèòîð');
end;


PM MAIL WWW Skype GTalk YIM MSN   Вверх
Alexeis
Дата 25.9.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(Scotch @  24.9.2007,  21:26 Найти цитируемый пост)
действительно непонятно что это за фрукт, плюс на эту команду "CreatePolygonRgn" не могу вызвать справку в Delphie.

  Ее нужно смотреть в справке по API (p.s. в Delphi 2005 и выше все справки объединены. Оч. удобно)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 25.9.2007, 10:38 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Лучше воспользуйся регионами и вырежи нужную фигуру.
PM MAIL   Вверх
Scotch
Дата 25.9.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



Цитата(Vetos @ 25.9.2007,  08:33)
Так у тебя хотя бы где нибудь описывается var Pts, а так конечно будет выдавать ету ошибку, прочти внимательней пример smile

Дык и я о том же, товарисч!

Думаю в  справке правильнее помещать рабочие примеры, чтобы на их работе разбираться дальше.
PM MAIL   Вверх
Scotch
Дата 25.9.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



Спасибо товарищу Rodman у, сработало, хоть и несколько не так как ожидалось...

Хотелось реальную дырку в форме, чтобы сквозь нее были видны изображения, расположенные за формой. 
PM MAIL   Вверх
Alix
Дата 25.9.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Например это может быть нужно, если хочется чтобы одна форма была не прозрачной, а у другой полупрозрачной.
Делай примерно так:
Код
 // В объвлении TForm1:
  private
    procedure WMMoving(var M: TWMMoving); message WM_MOVING;

...

// реализация. Форма2 будет на 10 пикселей правее формы 1 и на той же высоте.
procedure TForm1.WMMoving(var M: TWMMoving);
begin
  form2.Left := m.dragrect.Right + 10;
  form2.Top  := m.dragrect.Top;
end;



--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Scotch
Дата 25.9.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



Цитата(Snowy @ 25.9.2007,  10:38)
Лучше воспользуйся регионами и вырежи нужную фигуру.

В общем то, я так и хотел сделать (но не знаю как), думал с двумя формами будет проще. 
Подскажите пожалуйста, как пользоваться регионами и вырезать формы?

Это сообщение отредактировал(а) Scotch - 25.9.2007, 19:03
PM MAIL   Вверх
Alix
Дата 25.9.2007, 20:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 8
Всего: 23



Вот код, вырежет дырку.
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  formRGN,
  holeRGN : HRGN;

begin
  formRGN :=  CreateRectRgn(0, 0, width, height);
  holeRGN := CreateRectRgn(100, 100, 200, 200);

  CombineRgn(formRGN, formRGN, holeRGN, RGN_DIFF);

  SetWindowRgn(form1.Handle, formRGN, true);
end;



--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
Scotch
Дата 25.9.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



Спасибо, Alix, это то что было нужно!

 smile 
PM MAIL   Вверх
aktuba
Дата 25.9.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 7
Всего: 38



Цитата

Подскажите пожалуйста, как пользоваться регионами и вырезать формы?


Посмотри в DRKB или в DelphiWorld...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
Guedda
Дата 26.9.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 1
Всего: 78



Вот, вот, вот, вот и вот.

Выбирай  smile 


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Scotch
Дата 26.9.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 24.9.2007

Репутация: нет
Всего: нет



Спасибо, спасибо, спасибо, спасибо и спасибо  smile 

буду ваять и разбираться 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.