C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Текстовый редактор
marconi
Отправлено: 04.04.2004, 14:14


Станционный диспетчер

Группа: Участник
Сообщений: 86



Сделал простой текстовый редактор, открываю текстовые файлы через меню без проблем. Но когда указываю на текстовый файл и через контестное меню выбираю "Открыть с помощью"-> Мой редактор,
программа запускается но без текста. В свойствах текстового файла указывю своё приложение. Без результата. Щелкаю по любому текстовому файлу программа запускается- текста нет.sad.gif
Asher
Отправлено: 04.04.2004, 14:28


Мастер участка

Группа: Модератор
Сообщений: 550



А с чего вы взяли, что Ваша программа умет работать с параметрами запуска? Судя по вопросу Вы LPSTR strParam не разбирали. biggrin.gif
marconi
Отправлено: 04.04.2004, 14:54


Станционный диспетчер

Группа: Участник
Сообщений: 86



Как в анегдоте.
-Ты в очко играешь?
- играю
-а в свару?
-а это ещё куда?
Ну честно нет, и первый раз слышу. Где читать?ohmy.gif
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. Типа как если это имя через диалог открытия получили.

Блин устал объяснять. Лимит букв кончился. biggrin.gif
marconi
Отправлено: 04.04.2004, 16:02


Станционный диспетчер

Группа: Участник
Сообщений: 86



Я что то немного начал припоминать, такое встречалось в асме когда
описывали форму, командную строку и т.д
Спасибо, дальше не надо. Буду вспоминать,читать.smile.gif
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, я если честно про него совсем забыл cool.gif . 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, но это просто за меня уже определенная глобальная переменная как в моем примере. Никаких преимуществ она не несет, а переносимость на другой wink.gif компилятор снижает.

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



Спасибо всем.smile.gif
Теперь открывается как надо.

Отредактировано marconi — 05/04/2004, 21:22

Вернуться в Вопросы программирования в C++Builder