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

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


Информационный Канал Subscribe.Ru


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

Выпуск № 110
от 09.12.2002, 18:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 342
Отправлено ответов: 630
Активность: 184.2 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 116.43
URL: Пристанище неодинокого программиста
[Подробней >>]
Vadim
Статус: Доверительный
Общий рейтинг: 148.83
[Подробней >>]
Jadd
Статус: Профессиональный
Общий рейтинг: 142.83
[Подробней >>]
 
Melkor
Статус: Начальный
Общий рейтинг: 128.57
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.11
[Подробней >>]
Idle Sign
Статус: Опытный
Общий рейтинг: 146.93
URL: Blind Team
[Подробней >>]
 
Necro
Статус: Доверительный
Общий рейтинг: 110.59
[Подробней >>]
Pinman
Статус: Доверительный
Общий рейтинг: 143.75
[Подробней >>]
Vladimir
Статус: Опытный
Общий рейтинг: 110.8
Телефон: (08242) 43599 40099 раб 41255 дом
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 114.48
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 324. Здравствуйте, Эксперты! У меня к вам вопрос, можно ли в процессе выполнения прораммы вывести редакто... (ответов: 4)
Вопрос № 325. Здраствуйте уважаемые эксперты! У меня возник такой вопрос: как окно "чужого" приложения у... (ответов: 2)
Вопрос № 326. Здраствуйте уважаемые эксперты! огромное спасибо эксперту vitya за своевременный ответ на вопрос №32... (ответов: 1)
Вопрос № 327. Здраствуйте уважаемые эксперты! Подскажите пожалуйста есть ли какая апи для определения над каким ок... (ответов: 1)
Вопрос № 328. Пишу собственную инсталяшку. Как можно распаковать cab-файл (програмно)?... (ответов: 3)
Вопрос № 329. Здраствуйте уважаемые эксперты! Ответьте мне вот на такий вопрос: можно ли имея дискриптор окна чужо... (ответов: 3)
Вопрос № 330. Здраствуйте уважаемые эксперты! Подскажите как в делфи написать программу которая могла бы запускать... (ответов: 8)

Вопросов: 7, ответов: 22


 Вопрос № 324

Здравствуйте, Эксперты!
У меня к вам вопрос, можно ли в процессе выполнения прораммы вывести редактор TreeView Items Editor, что бы не писать функцию insert и так далее, если нет то каким образом узнать какой узел выбран??
Заранее спасибо!



Вопрос отправлен: 05.12.2002, 12:26
Отправитель: Владимир

[Следующий вопрос >>] [Список вопросов]

Отвечает Артём Шегеда

Добрый день, Владимир!

Вообще-то для этого существует файл справки. Но если использовать интернет для Вас дешевле, то пожалуйста:
property Selected: TTreeNode;

Description
Read Selected to access the selected node of the tree view. If there is no selected node, the value of Selected is nil.
Это в дословном переводе означает: Читайте Selected, чтобы обратиться к выбранному узлу дерева. Если нет никакого выбранного узла, значение Selected равно nil.

Ответ отправлен: 05.12.2002, 13:03
Отправитель: Артём Шегеда


Отвечает Vadim

Добрый день, Владимир!
1. В хелпе написано, что Items editor вызывается только во время разработки, однако можно попробовать разыскать его код в исходниках.
2. Какой узел выбран, можно узнать с помощью selected. См. приложение.

Приложение:

Ответ отправлен: 05.12.2002, 13:05
Отправитель: Vadim


Отвечает Jadd

Здравствуйте, Владимир!
Редактор называется Design Time Editor, что означает редактор времени разработки, т.е. вызвать его в рантайме никак. Для получения текущего нода есть свойство класса TreeView Selected, которая возвращает выбранный нод. Т.е. код может выглядеть так:
var
Node: TTreeNode;
begin
Node := TreeView1.Selected
а дальше делаешь все, что надо с выбранным нодом.

Ответ отправлен: 05.12.2002, 15:37
Отправитель: Jadd


Отвечает Melkor

Доброе время суток, Владимир!
Указатель на веделенный узел: TTreeViev.Selected

Ответ отправлен: 07.12.2002, 03:32
Отправитель: Melkor


 Вопрос № 325

Здраствуйте уважаемые эксперты!
У меня возник такой вопрос: как окно "чужого" приложения установить поверх всех окон?
Пытался пременить функцию SetWindowPos но ничего из этого не получилось.
// пример...
var wnd:HWND;
begin
// получаю дискриптор окна...
// использую функцию...
SetWindowPos(wnd,HWND_TOP,10,10,0,0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
// :( не работает ....
end;
хотя для перемещения окна по x,y функция работает :(. В чем моя ошибка? Есть ли альтернативный способ?
Зарание благодарен!
P.S. os Win98.



Вопрос отправлен: 05.12.2002, 13:46
Отправитель: nikolay (v-niki@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Здравствуйте, nikolay!
Вся проблема в последнем параметре: Убери флаг
SWP_NOACTIVATE
Цитирую МСДН:
If this flag is not set, the window is activated and moved to the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter parameter).

Ответ отправлен: 05.12.2002, 14:59
Отправитель: vitya


Отвечает Jadd

Здравствуйте, nikolay!
Если есть дескриптор окна, то SetForegroundWindow(hWnd: HWND);

Ответ отправлен: 05.12.2002, 15:29
Отправитель: Jadd


 Вопрос № 326

Здраствуйте уважаемые эксперты!
огромное спасибо эксперту vitya за своевременный ответ на вопрос №325!!!
И вот очередной вопрос:Как сделать так чтоб окно "чужого" приложения ОСТАВАЛОСЬ поверх всех окон не получая фокус?



Вопрос отправлен: 05.12.2002, 15:37
Отправитель: nikolay (v-niki@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Jadd

Доброе время суток, nikolay!
Надо вызвать функцию WinAPI и изменить параметры окна на WS_EX_TOPMOST. Это один способ. Другой способ - изменить свойство формы FormStyle на fsStayOnTop.

Ответ отправлен: 05.12.2002, 15:57
Отправитель: Jadd


 Вопрос № 327

Здраствуйте уважаемые эксперты!
Подскажите пожалуйста есть ли какая апи для определения над каким окном в данный момент находится курсор мыши не зависимо от того является ли окно активным в данный момент?
Зарание благодарен!



Вопрос отправлен: 05.12.2002, 15:41
Отправитель: nikolay (v-niki@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Idle Sign

Приветствую Вас, nikolay!
===== Pro bono publico, no bloody panico! =====
Можно попробовать FindWindowEx в купе с WindowFromPoint, с передачей этой функции позиции курсора. Должно работать.

Ответ отправлен: 06.12.2002, 15:48
Отправитель: Idle Sign


 Вопрос № 328

Пишу собственную инсталяшку. Как можно распаковать cab-файл (програмно)?



Вопрос отправлен: 05.12.2002, 22:09
Отправитель: Александр

[Следующий вопрос >>] [Список вопросов]

Отвечает Vadim

Здравствуйте, Александр!
В системном каталоге Windows (подкаталог Command) есть файл, который собственно и занимается распаковкой *.cab файлов. Называется 'extract.exe'. У себя в программе применить его можно с помощью функции ShellExecute(HWND, 'open', 'extract.exe', PChar(ключи_и_имя_распаковываемого_файла), PChar(рабочий_каталог), вид_окна). Все строковые параметры - типа PChar. Вид_окна - это флаги винды, которые задаются при открытии окна средствами WinAPI. Типа: SW_SHOWMINIMIZED - делает окно активным и минимизирует его.
Если влом все это писать, то есть макрос ExecProgram("command-line", display-state), где второй параметр - это опять вид окна: 0 - нормальный вид, 1 - минимизировано, 2 - максимизировано.
Есть еще пара функций для подобных вещей: WinExec(command-line, вид_окна) и CreateProcess. WinExec перекочевало из win3.1 и просто-напросто вызывает CreateProcess. Более правильным считается вызов функции CreateProcess, но там куча всевозможных параметров.


Ответ отправлен: 06.12.2002, 10:32
Отправитель: Vadim


Отвечает Jadd

Доброе время суток, Александр!
Ищи описание каба. На www.codenet.ru есть описалово. Вообще непонятно зачем тебе енто надо, когда есть куча готовых инсталях довольно приличных.

Ответ отправлен: 06.12.2002, 02:46
Отправитель: Jadd


Отвечает Melkor

Приветствую Вас, Александр!
Можно воспользоваться ShellExecute(hwnd, 'open', FileName, Param, Patch, Show) из ShellAPI, где hwnd := Form.Handle, FileName - имя CAB распаковщика, Show - способ показа окна (напр sw_hide), Param - параметры (имя файла и т.д.).


Ответ отправлен: 07.12.2002, 07:17
Отправитель: Melkor


 Вопрос № 329

Здраствуйте уважаемые эксперты!
Ответьте мне вот на такий вопрос: можно ли имея дискриптор окна чужого приложения получить строку для запуска этого приложения?



Вопрос отправлен: 06.12.2002, 11:41
Отправитель: Nikolay (v-niki@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Vadim

Приветствую Вас, Nikolay!
А если не секрет, как ты не имея запущенного приложения получил дескриптор окна, принадлежащий этому приложению? Если приложение не запущено, то окна никакого нет :) и, следовательно, нет его дескриптора. А если ты знаешь дескриптор, но не знаешь какому приложению окно принадлежит, то это можно узнать с помощью WinSight32. Идет в комплекте с Дельфи и отслеживает все процессы системы.

Ответ отправлен: 06.12.2002, 12:41
Отправитель: Vadim


Отвечает Jadd

Доброе время суток, Nikolay!
Одной функцией это не сделать, если речь идет о полном пути к файлу процесса, хэндл окна которого у тебя есть. Короче, пиши на jadd@rol.ru и что-нибудь придумаем.

Ответ отправлен: 06.12.2002, 13:50
Отправитель: Jadd


Отвечает Idle Sign

Здравствуйте, Nikolay!
===== Pro bono publico, no bloody panico! =====
Вполне. Имея хэндл, узнаешь имя запущенного приложения (если по заглавию окна, то GetWindowText) далее ищешь его (если не знаешь где он) FindFirst/Next, далее - запускаешь CreateProcess/ShellExecute.

Ответ отправлен: 06.12.2002, 15:47
Отправитель: Idle Sign


 Вопрос № 330

Здраствуйте уважаемые эксперты!
Подскажите как в делфи написать программу которая могла бы запускаться с различными параметрами как в dos программах? как получить параметр из командной строки?
Зарание благодарен!
p.s. Огромное спасибо эксперту JADD за точные ответы



Вопрос отправлен: 06.12.2002, 11:41
Отправитель: Nikolay (v-niki@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Necro

Здравствуйте, Nikolay!
paramstr(n) возвращает n-ный параметр, или полное имя exe-файла, если n = 0 .

Ответ отправлен: 06.12.2002, 15:46
Отправитель: Necro


Отвечает Vadim

Доброе время суток, Nikolay!
Запускать программу с параметрами можно точно так-же, как и в досе. Т.е. в ярлыке приложения, после строки запуска пишешь ключи запуска.
В дельфи строка параметров(ключей) получается так-же как и в Паскале, т.е. с помощью функций ParamStr - строка с параметрами и ParamCount - количество параметров. См. приложение.


Приложение:

Ответ отправлен: 06.12.2002, 12:40
Отправитель: Vadim


Отвечает Pinman

Доброе время суток, Nikolay!
Смотри функцию WinMain в головном файле проекта

Ответ отправлен: 06.12.2002, 19:28
Отправитель: Pinman


Отвечает Jadd

Приветствую Вас, Nikolay!
Дык незачто благодарить. Как говорится, чем богаты. Теперь по-существу, есть WinAPI функция GetCommandLine(), которая возвращает полную коммандную строку, переданную в процесс (читай в твою прогу). Если надо разделить всю коммандную строку на аргументы, CommandLineToArgvW, но она работает с юникодом и, стало быть, надо юзать GetCommandLineW() вместо GetCommandLine(). Удачи

Ответ отправлен: 06.12.2002, 13:37
Отправитель: Jadd


Отвечает Vladimir

Приветствую Вас, Nikolay!
Есть две функции:
ParamCount -- возвращает количество параметров в командной строке
ParamStr(i:integer) -- возвращает i-тый параметр


Ответ отправлен: 06.12.2002, 14:00
Отправитель: Vladimir


Отвечает Melkor

Здравствуйте, Nikolay!
Ответ: ParamStr(Index: Integer): String, где Index - номер параметра.

Ответ отправлен: 07.12.2002, 07:22
Отправитель: Melkor


Отвечает Idle Sign

Приветствую Вас, Nikolay!
===== Pro bono publico, no bloody panico! =====
При загрузке программы следует обрабатывать командную строку с помощью ParamStr (0 - полный путь к запущенному приложению, 1,2... - параметры командной строки, разделенные пробелами), ParamCount (количество переданных параметров).

Ответ отправлен: 07.12.2002, 13:46
Отправитель: Idle Sign


Отвечает baldr

Приветствую Вас, Nikolay!
Параметры можно получить так же, как и в Паскале. Есть функция ParamCount - это число параметров,
а есть функция ParamStr(i:integer) - возвращает i-й параметр в виде строки символов. Если i=0,
то возвратится имя запущенного exe-файла.


Ответ отправлен: 08.12.2002, 00:33
Отправитель: baldr



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (39)
C / C++ (28)
Perl (6)
Delphi (19)
Pascal (22)
Basic / VBA (9)
Java / JavaScript (11)
PHP (6)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (31)
Windows NT/2000/XP (21)
"Железо" (29)
Поиск информации (14)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (16)
Юристу
Гражданское право (10)
Семейное право (3)
Трудовое право (5)
КоАП (3)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное