Вопрос № 82472: Здравствуйте, Уважаемые Эксперты!!!
Есть задача:
Разработать невизуальный компонент, обеспечивающий графическое оформление приложения.
НУ с классом я определился - это TComponent, думая что все согласятся, а вот как мне из моег...Вопрос № 82482: Здравствуйте, уважаемые эксперты. Помогите мне, пожалуйста, решить следующие проблемы.
1. а) Как программно отключить мышку во ВСЕЙ Виндовс, а не только в моей программе?
б) Или же просто как ее загнать в определенную область?
...Вопрос № 82561: При запуске программы появляеться первая форма потом она убираеться с экрана с помощью Form1.Hide и появляеться форма два (Form2.Show). Но когда я закываю эту форму нажимая на крестик закрываться только эта форма, а не сама программа.
Как сделат...
Вопрос № 82.472
Здравствуйте, Уважаемые Эксперты!!!
Есть задача:
Разработать невизуальный компонент, обеспечивающий графическое оформление приложения.
НУ с классом я определился - это TComponent, думая что все согласятся, а вот как мне из моего компонента получить доступ к форме, на которой расположен мой компонент, для реализации оформления этой самой формы и ее элементов (что имено надо сделать см. приложение).
У компонентов есть свойство 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!
Код у Вас почти правильный, вот только перед использованием указателя на что-то нужно выделить память,на которую будет ссылаться указатель, а после использования вернуть память системе:
При запуске программы появляеться первая форма потом она убираеться с экрана с помощью Form1.Hide и появляеться форма два (Form2.Show). Но когда я закываю эту форму нажимая на крестик закрываться только эта форма, а не сама программа.
Как сделать чтобы чтобы закрывалась программа?
Отвечает: monah
Здравствуйте, Diman Soldatov / DES!
Используйте метод Form1.close; или Application.terminate;
С приложением связывается первая созданная форма. Поэтому толь при ее закрытии программа и завершает работу. Второй же метод завершает работу приложения, при этом метод TForm.onclose не вызывается.
--------- festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 14.04.2007, 16:19
Отвечает: Крылов Александр Владимирович
Здравствуйте, Diman Soldatov / DES!
во второй форме надо написать Form1.Close; Приложение написанное на Delphi закрывается только тогда, когда закрывается главная форма, по умолчанию главной формой является то форма, которая была создана при создании нового проекта
Отвечает: 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!