marconi |
Отправлено: 04.04.2004, 14:14 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Сделал простой текстовый редактор, открываю текстовые файлы через меню без проблем. Но когда указываю на текстовый файл и через контестное меню выбираю "Открыть с помощью"-> Мой редактор,
программа запускается но без текста. В свойствах текстового файла указывю своё приложение. Без результата. Щелкаю по любому текстовому файлу программа запускается- текста нет.
|
|
Asher |
Отправлено: 04.04.2004, 14:28 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
А с чего вы взяли, что Ваша программа умет работать с параметрами запуска? Судя по вопросу Вы LPSTR strParam не разбирали.
|
|
marconi |
Отправлено: 04.04.2004, 14:54 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Как в анегдоте.
-Ты в очко играешь?
- играю
-а в свару?
-а это ещё куда?
Ну честно нет, и первый раз слышу. Где читать?
|
|
Asher |
Отправлено: 04.04.2004, 15:49 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
При вызове документа вызывается ваша программа, а параметром к ней прицепляется имя документа. Если бы вы во времена всяких NC, VC и DN
писали всяческие файлики типа *.ext (реакция на расширение) — то там все живьем и увидели бы.
В главном модуле твой программы, там где USEUNIT всяческие, есть такая функция:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
вот значит предполагаем что интересует нас один параметр, да и тот строковый.
тогда к этой функции подписываем WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR StrParam, int)
где StrParam строка символов, которую прицепили к нашей проге (юзер или система при клике на документе)
В том модуле, где открываешь документ — заводишь глобальную переменную, например AnsiString gParam;//
в том модуле где WinMain добавляешь
extern AnsiString gParam;//
а внутри функции WinMain делаешь
gParam = (AnsiString)StrParam;
Ну а когда конструктор отработал, где нибудь к примеру в
void __fastcall TMainForm::FormShow(TObject *Sender), если строка gParam не пустая, добавляешь вызов функции открытия документа с именем gParam. Типа как если это имя через диалог открытия получили.
Блин устал объяснять. Лимит букв кончился.
|
|
marconi |
Отправлено: 04.04.2004, 16:02 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Я что то немного начал припоминать, такое встречалось в асме когда
описывали форму, командную строку и т.д
Спасибо, дальше не надо. Буду вспоминать,читать.
|
|
TerAn |
Отправлено: 04.04.2004, 18:55 |
|
Не зарегистрирован
|
А не проще ли использовать ParamStr(i) для получения i-го параметра? |
|
marconi |
Отправлено: 04.04.2004, 21:19 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
А можно подробнее?
|
|
joynter |
Отправлено: 04.04.2004, 23:09 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 137
|
Старик!
Я ни х..я не понял, но ты мне близок!
Как только ты начал записывать , твоислова сразу запали мне прямо в сердце...........
пожалуйста дай пример твоего кода и я попытаюсь нйти в нем ошибку |
|
Asher |
Отправлено: 05.04.2004, 08:18 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Можно конечно заюзать и ParamStr, я если честно про него совсем забыл . marconi должен подойти.
To marconi: пишешь в проге ParamStr и жмешь F1. Там махонькая справка и пример.
To TerAn: мне в нем не понравилось то, что
QUOTE | Note: Use double quotes to wrap multiple words as one parameter (such as long file names containing spaces) |
а мне нужен был разбор по слэшам, как в ДОСе без всяких кавычек.
Можно конечно было заюзать CmdLine, но это просто за меня уже определенная глобальная переменная как в моем примере. Никаких преимуществ она не несет, а переносимость на другой компилятор снижает.
P.S. To joynter: Водка или грибы?
|
|
marconi |
Отправлено: 05.04.2004, 15:34 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Да напомнили про водку и грибы, может тогда черт с ним с
ParamStr ?
Ну хорошо спасибо вечером попробую (или ParamStr или грибы).
А с LPSTR StrParam я вчера запутался совсем. Есть исходники RichEdit
4 штуки и ни в одном такие вещи не встречаются. Да если честно
мне только для самообразования. Выписал через интернет Архангельского Builder 6, месяц прошел все нет.
|
|
Admin |
Отправлено: 05.04.2004, 17:01 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Пишешь, например в событии формы onShow
CODE |
void __fastcall TMainForm::FormShow(TObject *Sender)
{
if(ParamCount()) {
for (int i=1; i<=ParamCount(); i++){
OpenDialog1->FileName = ParamStr(i);
// вызов вашей процедуры открытия файла
// ...
}
}
|
Тогда при открытии файла (группы файлов) вашей программой,
они корректно будут обрабатываться, а если у вас MDI-приложение,
то тоже, все они будут открыты.
|
|
marconi |
Отправлено: 05.04.2004, 18:08 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 86
|
Спасибо всем.
Теперь открывается как надо.
Отредактировано marconi — 05/04/2004, 21:22
|
|