Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 785
от 19.04.2007, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 463, Экспертов: 99
В номере:Вопросов: 3, Ответов: 12


Вопрос № 82472: Здравствуйте, Уважаемые Эксперты!!! Есть задача: Разработать невизуальный компонент, обеспечивающий графическое оформление приложения. НУ с классом я определился - это TComponent, думая что все согласятся, а вот как мне из моег...
Вопрос № 82482: Здравствуйте, уважаемые эксперты. Помогите мне, пожалуйста, решить следующие проблемы. 1. а) Как программно отключить мышку во ВСЕЙ Виндовс, а не только в моей программе? б) Или же просто как ее загнать в определенную область? ...
Вопрос № 82561: При запуске программы появляеться первая форма потом она убираеться с экрана с помощью Form1.Hide и появляеться форма два (Form2.Show). Но когда я закываю эту форму нажимая на крестик закрываться только эта форма, а не сама программа. Как сделат...

Вопрос № 82.472
Здравствуйте, Уважаемые Эксперты!!!

Есть задача:
Разработать невизуальный компонент, обеспечивающий графическое оформление приложения.

НУ с классом я определился - это TComponent, думая что все согласятся, а вот как мне из моего компонента получить доступ к форме, на которой расположен мой компонент, для реализации оформления этой самой формы и ее элементов (что имено надо сделать см. приложение).

Спасибо.

Приложение:

Отправлен: 13.04.2007, 19:55
Вопрос задал: Korolyov Alexandr (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: PGM
Здравствуйте, Korolyov Alexandr!

У компонентов есть свойство Owner - полагаю это то, что вам надо (однако все- таки проверяйте, что Owner is TForm, а то ведь могут "бросить" и в TFrame и вообще динамически создать).

Ну а все остальное, что в приложении, я так понимаю к вопросу не относится? :)
А то там есть вещи, далеко не очевидные - например, как перехватывать перерисовки формы, если компонент невизуальный. Я бы на вашем месте все-таки взял визуальный компонент, что-то типа TImage или его предков и от него отталкивался - под перечисленные задачи вполне подходит. Если же речь идет о скинах, то они вообще по-другому обычно делаются (там же еще и кнопки, и списки и т.п. - а это не только цветовая палитра)
Ответ отправил: PGM (статус: 4-ый класс)
Ответ отправлен: 13.04.2007, 23:06
Оценка за ответ: 4
Комментарий оценки:
В приложении как раз уточнения на задчу, компонент должен быть именно не визуальный, я думаю Timage не пойдет, как элементы формы обрабатывать


Вопрос № 82.482
Здравствуйте, уважаемые эксперты. Помогите мне, пожалуйста, решить следующие проблемы.

1. а) Как программно отключить мышку во ВСЕЙ Виндовс, а не только в моей программе?
б) Или же просто как ее загнать в определенную область?

2. Если у Вас нет вариантов ответа на 1 вопросы, то тогда как избавиться от ошибки при выполнении следующего кода?

procedure TForm1.Button1Click(Sender: TObject);
Var MyRect: PRect;
begin
MyRect.Top:=1;
MyRect.Left:=1;
MyRect.Right := 5;
MyRect.Bottom := 5;
ClipCursor(MyRect);
end;

Заранее благодарен.
P.S. Win SP2, Delphi 7.
Отправлен: 13.04.2007, 21:11
Вопрос задал: Sanya (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 12)

Отвечает: Mo-skin
Здравствуйте, Sanya!
Вот так попробуйте:
procedure TForm1.Button1Click(Sender: TObject);
Var MyRect: TRect;
begin
MyRect.Top:=1;
MyRect.Left:=1;
MyRect.Right := 100;
MyRect.Bottom := 100;
ClipCursor(@MyRect);
end;
---------
Чем больше женщину мы меньше, тем меньше больше мы ее!
Ответ отправил: Mo-skin (статус: 4-ый класс)
Ответ отправлен: 13.04.2007, 21:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо за правильные ответ и за оперативность. Все работает. Вам 5+ :)

Отвечает: Bingo
Здравствуйте, Sanya!
Для того, чтобы вырубить мышь, используйте

----

procedure StopMouse;
var
Pos:TPoint;
Lock:TRect;
begin
GetCursorPos(Pos);
Lock.Left:=Pos.X-1;
Lock.Top:=Pos.Y-1;
Lock.Right:=Pos.X;
Lock.Bottom:=Pos.Y;
ClipCursor(@Lock);
end;

----

Чтобы включить:

----
procedure RunMouse;
var
Lock:TRect;
begin
Lock.Left:=0;
Lock.Top:=0;
Lock.Right:=GetSystemMetrics(SM_CXSCREEN);
Lock.Bottom:=GetSystemMetrics(SM_CYSCREEN);
ClipCursor(@Lock);
end;
----
А отличия Вашей программы от моей, Вы, думаю, найдете сами.
Удачи!
---------
C темным пивом в светлое будущее!
Ответ отправил: Bingo (статус: 3-ий класс)
Ответ отправлен: 13.04.2007, 22:32
Оценка за ответ: 5
Комментарий оценки:
Спасибо за развернутый ответ. :)

Отвечает: PGM
Здравствуйте, Sanya!

А вот еще варианты:
1. BlockInput - правда отключит не только мышь, но и клавиатуру
2. Таймер и SetCursorPos не даст мыши сильно баловаться
3. Перехватчик на WH_MOUSE_LL (SetWindowsHookEx) и низкоуровневая фильтрация всех событий от мыши (полезно, когда надо отключить только часть функциональности).
Ответ отправил: PGM (статус: 4-ый класс)
Ответ отправлен: 13.04.2007, 23:14
Оценка за ответ: 4
Комментарий оценки:
Спасибо, но все же первый вариант не работает (насколько это у меня получилось), а остальные более сложные в оформлении и я еще их не пробовал.

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, Sanya!

Код у Вас почти правильный, вот только перед использованием указателя на что-то нужно выделить память,на которую будет ссылаться указатель, а после использования вернуть память системе:

begin
New(MyRect);
...
Dispose(MyRect);
end;
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 8-ой класс)
Ответ отправлен: 16.04.2007, 10:00


Вопрос № 82.561
При запуске программы появляеться первая форма потом она убираеться с экрана с помощью Form1.Hide и появляеться форма два (Form2.Show). Но когда я закываю эту форму нажимая на крестик закрываться только эта форма, а не сама программа.
Как сделать чтобы чтобы закрывалась программа?
Отправлен: 14.04.2007, 16:11
Вопрос задал: Diman Soldatov / DES (статус: 1-ый класс)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: monah
Здравствуйте, Diman Soldatov / DES!
Используйте метод Form1.close; или Application.terminate;
С приложением связывается первая созданная форма. Поэтому толь при ее закрытии программа и завершает работу. Второй же метод завершает работу приложения, при этом метод TForm.onclose не вызывается.
---------
festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 14.04.2007, 16:19

Отвечает: Крылов Александр Владимирович
Здравствуйте, Diman Soldatov / DES!
во второй форме надо написать Form1.Close; Приложение написанное на Delphi закрывается только тогда, когда закрывается главная форма, по умолчанию главной формой является то форма, которая была создана при создании нового проекта
Ответ отправил: Крылов Александр Владимирович (статус: 3-ий класс)
Ответ отправлен: 14.04.2007, 16:19

Отвечает: W@NDeReR
Здравствуйте, Diman Soldatov / DES!
В окне Object Inspector второй формы перейдите на вкладку Events. Дважды щелкните в строке onClose и в созданой процедуре напишите:
Form1.Close;
---------
Опыт — дитя мысли, а мысль — дитя действия. Нельзя учиться по книгам.
Ответ отправил: W@NDeReR (статус: 3-ий класс)
Ответ отправлен: 14.04.2007, 17:14

Отвечает: Мисуно Михаил Петрович
Здравствуйте, Diman Soldatov / DES!
В обработчике события onClose формы 2 пишете Form1.Close:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Close;
end;
Ответ отправил: Мисуно Михаил Петрович (статус: 1-ый класс)
Ответ отправлен: 14.04.2007, 21:07

Отвечает: Necromancer
Здравствуйте, Diman Soldatov / DES!
В обработчике события OnClose для второй формы напишите строчку:
Form1.Close,
где Form1 - имя первой формы.
И еще не забудьте подключить ко второму модулю первый, иначе не увидит первую форму.
Ответ отправил: Necromancer (статус: 1-ый класс)
Ответ отправлен: 15.04.2007, 10:50

Отвечает: Павлов Сергей Сергеевич
Здравствуйте, Diman Soldatov / DES!
Вам необходимо сделать Form 2 главной.
Для этого нажмите Project ->Options...
В открывшемся окне выберите вкладку Forms,
и перетащите Form 1 из левого столбца в правый!
Ответ отправил: Павлов Сергей Сергеевич (статус: 1-ый класс)
Ответ отправлен: 15.04.2007, 16:48

Отвечает: Алексеев Александр Владимирович
Здравствуйте, Diman Soldatov / DES!

На событие Form2 OnClose пропиши Form1.Close;
Ответ отправил: Алексеев Александр Владимирович (статус: 1-ый класс)
Ответ отправлен: 15.04.2007, 22:44


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное