Page 1 of 1

запуск файла справки

Posted: Fri Mar 13, 2009 8:14 am
by SmileGobo
Создал для своей программы файл справки и по менюшке и нажатию кнопки F1 вызываю:

Code: Select all

void MyFrame1::OnHelp(wxCommandEvent&){

    if(wxExecute("hh.exe help.chm")==0){
        Alert("Ошибка!");
    }
}
Дело в том что если запускать файл не из директории с файлом справки, а по ярлыку или в IDE в этом случае текущая директория устанавливается другая. Как выяснить директорию в которой находится экзешник?

Posted: Fri Mar 13, 2009 10:17 am
by tan
Во-первых, почему не используешь для отображения справки средства самой WX? wxHelpProvider, wxHelpControllerHelpProvider и иже с ними. Очень удобная штука.

А относительно самого вопроса - смотри wxStandardPaths::GetExecutablePath().

Posted: Fri Mar 13, 2009 10:36 am
by SmileGobo
Спасибо это то, что я искал.
wxHelpProvider, wxHelpControllerHelpProvider я о них не знал, и даже не думал за них, к томуже зачем программу нагружать лишний раз пусть виндовые средства работают.

Кстати заметил что проблема не в директории, если запуск происходит не от пользователя, а от IDE или ярлыка созданного инсталлером(ярлык созданный руками нормально отрабатывает), то валится ошибка, что не возможно открыть файл, т.е. файл находит, а запустить не может. Что тут может быть?

Posted: Fri Mar 13, 2009 10:37 am
by T-Rex
Так статьи ж есть, как все сделать
http://wxwidgets.info/wx_help_system_ru_1/
http://wxwidgets.info/wx_help_system_ru_2/

Posted: Fri Mar 13, 2009 2:07 pm
by SmileGobo
T-Rex спасибо за ссылочки.
Несколько часов бьюсь - без результата.
Да и решение длинное, мое по проще будет если б не косяки эти =\.

Через wxShell("start <путь до файла>"),через него все отлично запускается, можно сделать, раздражает консольное окно.

Posted: Fri Mar 13, 2009 2:24 pm
by tan
SmileGobo wrote:T-Rex спасибо за ссылочки.
Несколько часов бьюсь - без результата.
Да и решение длинное, мое по проще будет если б не косяки эти =\.
Так а в чем проблема с wxStandardPaths::GetExecutablePath()?
В wxApp::OnInit() явно устанави рабочую диру где сам екзешник находится и, если файл хелпа там же, то wxExecute("hh.exe help.chm") должно работать.

Posted: Fri Mar 13, 2009 2:34 pm
by SmileGobo
Проблема не в wxStandardPaths::GetExecutablePath().
wxExecute("hh.exe help.chm") работает впринцыпе, но если запуск происходит через IDE(после компиляции) или ярлык, который создал инсталлер это не срабатывает - пишет не могу открыть файл.

Posted: Fri Mar 13, 2009 3:24 pm
by tan
SmileGobo wrote:Проблема не в wxStandardPaths::GetExecutablePath().
wxExecute("hh.exe help.chm") работает впринцыпе, но если запуск происходит через IDE(после компиляции) или ярлык, который создал инсталлер это не срабатывает - пишет не могу открыть файл.
Ну так не может открыть файл именно потому, что рабочая дира проги в этом случае может быть какой угодно, поэтому hh.exe не может найти файл "help.chm", где его искать-то?
Альтернативный вариант - вызывай хелп с указанием полного пути к файлу, типа так:

Code: Select all

wxStandardPaths sp;
wxString cmd_line("hh.exe \"");
cmd_line += sp.GetExecutablePath()) + "/help.chm\"";
wxExecute(cmd_line);

Posted: Fri Mar 13, 2009 6:39 pm
by SmileGobo
Черт возьми вы почти правы! :D
токо метод другой:

Code: Select all

 wxStandardPaths sp;
    wxString cmd_line("hh.exe \\"");
    cmd_line += sp.GetLocalDataDir()  + "\\ \help.chm\\"";
    wxExecute(cmd_line);
Зы слеши плохо тут обрабатываются =\