Здравствуйте, Эксперты! У меня к вам вопрос, можно ли в процессе выполнения прораммы вывести редактор TreeView Items Editor, что бы не писать функцию insert и так далее, если нет то каким образом узнать какой узел выбран?? Заранее спасибо!
Вообще-то для этого существует файл справки. Но если использовать интернет для Вас дешевле, то пожалуйста: 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.
Здравствуйте, 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!!! И вот очередной вопрос:Как сделать так чтоб окно "чужого" приложения ОСТАВАЛОСЬ поверх всех окон не получая фокус?
Доброе время суток, nikolay! Надо вызвать функцию WinAPI и изменить параметры окна на WS_EX_TOPMOST. Это один способ. Другой способ - изменить свойство формы FormStyle на fsStayOnTop. Ответ отправлен: 05.12.2002, 15:57 Отправитель: Jadd
Вопрос № 327
Здраствуйте уважаемые эксперты! Подскажите пожалуйста есть ли какая апи для определения над каким окном в данный момент находится курсор мыши не зависимо от того является ли окно активным в данный момент? Зарание благодарен!
Приветствую Вас, nikolay! ===== Pro bono publico, no bloody panico! ===== Можно попробовать FindWindowEx в купе с WindowFromPoint, с передачей этой функции позиции курсора. Должно работать. Ответ отправлен: 06.12.2002, 15:48 Отправитель: Idle Sign
Вопрос № 328
Пишу собственную инсталяшку. Как можно распаковать cab-файл (програмно)?
Здравствуйте, Александр! В системном каталоге 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
Здраствуйте уважаемые эксперты! Ответьте мне вот на такий вопрос: можно ли имея дискриптор окна чужого приложения получить строку для запуска этого приложения?
Приветствую Вас, 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 за точные ответы
Здравствуйте, 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.