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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

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

Post by SmileGobo » Fri Mar 13, 2009 8:14 am

Создал для своей программы файл справки и по менюшке и нажатию кнопки F1 вызываю:

Code: Select all

void MyFrame1::OnHelp(wxCommandEvent&){

    if(wxExecute("hh.exe help.chm")==0){
        Alert("Ошибка!");
    }
}
Дело в том что если запускать файл не из директории с файлом справки, а по ярлыку или в IDE в этом случае текущая директория устанавливается другая. Как выяснить директорию в которой находится экзешник?
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Fri Mar 13, 2009 10:17 am

Во-первых, почему не используешь для отображения справки средства самой WX? wxHelpProvider, wxHelpControllerHelpProvider и иже с ними. Очень удобная штука.

А относительно самого вопроса - смотри wxStandardPaths::GetExecutablePath().
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

Post by SmileGobo » Fri Mar 13, 2009 10:36 am

Спасибо это то, что я искал.
wxHelpProvider, wxHelpControllerHelpProvider я о них не знал, и даже не думал за них, к томуже зачем программу нагружать лишний раз пусть виндовые средства работают.

Кстати заметил что проблема не в директории, если запуск происходит не от пользователя, а от IDE или ярлыка созданного инсталлером(ярлык созданный руками нормально отрабатывает), то валится ошибка, что не возможно открыть файл, т.е. файл находит, а запустить не может. Что тут может быть?
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

User avatar
T-Rex
Moderator
Moderator
Posts: 1198
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Fri Mar 13, 2009 10:37 am

Так статьи ж есть, как все сделать
http://wxwidgets.info/wx_help_system_ru_1/
http://wxwidgets.info/wx_help_system_ru_2/

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

Post by SmileGobo » Fri Mar 13, 2009 2:07 pm

T-Rex спасибо за ссылочки.
Несколько часов бьюсь - без результата.
Да и решение длинное, мое по проще будет если б не косяки эти =\.

Через wxShell("start <путь до файла>"),через него все отлично запускается, можно сделать, раздражает консольное окно.
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Fri Mar 13, 2009 2:24 pm

SmileGobo wrote:T-Rex спасибо за ссылочки.
Несколько часов бьюсь - без результата.
Да и решение длинное, мое по проще будет если б не косяки эти =\.
Так а в чем проблема с wxStandardPaths::GetExecutablePath()?
В wxApp::OnInit() явно устанави рабочую диру где сам екзешник находится и, если файл хелпа там же, то wxExecute("hh.exe help.chm") должно работать.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

Post by SmileGobo » Fri Mar 13, 2009 2:34 pm

Проблема не в wxStandardPaths::GetExecutablePath().
wxExecute("hh.exe help.chm") работает впринцыпе, но если запуск происходит через IDE(после компиляции) или ярлык, который создал инсталлер это не срабатывает - пишет не могу открыть файл.
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Fri Mar 13, 2009 3:24 pm

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);
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

SmileGobo
Earned some good credits
Earned some good credits
Posts: 111
Joined: Wed Jul 30, 2008 8:01 am
Location: Russia/MO
Contact:

Post by SmileGobo » Fri Mar 13, 2009 6:39 pm

Черт возьми вы почти правы! :D
токо метод другой:

Code: Select all

 wxStandardPaths sp;
    wxString cmd_line("hh.exe \\"");
    cmd_line += sp.GetLocalDataDir()  + "\\ \help.chm\\"";
    wxExecute(cmd_line);
Зы слеши плохо тут обрабатываются =\
win xp sp2; CodeBlocks/mingw/wxWidgets 2.8.9/wxFormBuilder
web-программирование:PHP,js/Ajax

Post Reply