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

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


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

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

Выпуск № 771
от 05.04.2007, 12:05

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


Вопрос № 80376: Здравствуйте. Поскажите пожалуйста как в Д7 сделать панель наподобии панели задач что бы она автоматически скрывалась и активировалась при наведении курсора на место ее расположения....
Вопрос № 80377: запустив на выполнение файл, как узнать идентификатор запустившегося окна? Для конкретной программы можно воспользоваться FindWindow, а при смене версии как быть? Возможно будет известен процесс запустившегося приложения - это может помочь? Смен...
Вопрос № 80403: Здравствуйте! У меня вопрос по ShellListView. Мне надо получить название выбранного файла или папки. Ну по логике, я думал, что это делается так: Label1.caption:=ShellListView.selected.caption; Но возвращается пустая строка, зат...

Вопрос № 80.376
Здравствуйте.
Поскажите пожалуйста как в Д7 сделать панель наподобии панели задач что бы она автоматически скрывалась и активировалась при наведении курсора на место ее расположения.
Отправлен: 30.03.2007, 13:49
Вопрос задал: Шмаров Сергей (статус: 3-ий класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Gh0stik
Здравствуйте, Шмаров Сергей!

Вот предлагаю Вам такие два примера, в которых используются такие объекты как StatusBar и ToolBar (вкладка Win32) - при наведении курсора на места их расположения объекты будут отображаться и скрываться в противном случае. Для обработки положения указателя мыши использую FormMouseMove().

При создании формы сразу скрываем эти объекты:

procedure TForm1.FormCreate(Sender: TObject);
begin
StatusBar1.Visible:=false;
ToolBar1.Visible:=false;
end;


А теперь позаботимся о том что бы данные объекты отображались лишь в случае расположения указателя мыши над ними.

Пример №1.

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if y > Form1.ClientHeight-StatusBar1.Height {проверяем положение указателя}
then StatusBar1.Visible:=true else StatusBar1.Visible:=false;
if y < ToolBar1.Height {проверяем положение указателя}
then ToolBar1.Visible:=true else ToolBar1.Visible:=false;
end;


А вот аналогичная процедурка, но возможно Вам покажется что тут написано что-то несусветное - а на самом деле это просто более компактная, и на мой взгляд рациональная запись предыдущего примера. ;о)

Пример №2.

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar1.Visible:=y > Form1.ClientHeight-StatusBar1.Height;
ToolBar1.Visible:=y < ToolBar1.Height;
end;


Если будут вопросы - обращайтесь...

Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 30.03.2007, 15:38
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь!


Вопрос № 80.377
запустив на выполнение файл, как узнать идентификатор запустившегося окна? Для конкретной программы можно воспользоваться FindWindow, а при смене версии как быть? Возможно будет известен процесс запустившегося приложения - это может помочь?
Смена версий, пример: файл 1.mcd, созданный в Mathcad Professional откроется и в Mathcad 14, но только в первом случае окно будет {Mathcad Professional: [1]}, а во втором {Mathcad - [1]}

Приложение:

Отправлен: 30.03.2007, 13:53
Вопрос задал: Kolyan (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Pavel Maltsev
Здравствуйте, Kolyan!

Здравствуйте, Kolyan!

В функцию FindWindow вы передаете не только за головок, но и название класса окна, а оно как правило не меняется от версии к версии.

Т.е. искать окно нужно FindWindow(ClassName, nil)
где ClassName - это наименование класса окна. Узнать наименование класса окна можно например с помощью программы spy++ входящей в комплект VisualStudio
Ответ отправил: Pavel Maltsev (статус: 3-ий класс)
Ответ отправлен: 30.03.2007, 14:00
Оценка за ответ: 4
Комментарий оценки:
попробуем

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

Можно использовать не заголовок, а класс окна (сначала вычислив его с помощью WinSight например). Правда, это часто не проходит с приложениями собранными с помощью MFC - они часто генерят название класса динамически.

Другой способ: делать EnumWindows до запуска и после, все новые окна проверять на принадлежность к запускаемому приложению. Часто их больше чем одно - тогда надо сравнивать флаги на предмет того, какое из них главное, видимое и т.п.
Ответ отправил: PGM (статус: 2-ой класс)
Ответ отправлен: 30.03.2007, 16:40
Оценка за ответ: 4
Комментарий оценки:
попробуем


Вопрос № 80.403
Здравствуйте!
У меня вопрос по ShellListView. Мне надо получить название выбранного файла или папки. Ну по логике, я думал, что это делается так:

Label1.caption:=ShellListView.selected.caption;

Но возвращается пустая строка, зато с SubItems все нормально. Дак вот, как привильно получить имя элемента (файли или папки)?
Отправлен: 30.03.2007, 16:50
Вопрос задал: Red Spirit (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Red Spirit!
Помимо такого способа узнать название выбранного элемента (конкретно - папки) можно так:
Label1.Caption:=ShellListView1.SelectedFolder.DisplayName;
Таким образом уже два варианта. К примеру, чтобы точно получить название, может проверить оба способа и выбрать тот, который не является пустой строкой.
Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 31.03.2007, 08:57


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное