[C++] Na "Bestand openen met.." locatie opvragen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 14-04 10:23
Ik heb in C++ een programma gemaakt dat werkt met een template. Zonder template kun je het programma niet draaien.

Op het moment dat het programma opstart komt er een OpenDialog() om de template te selecteren en verder gaat alles dan naar behoren.

Nu wil ik dus graag dat ik mijn template bijvoorbeeld de extensie .abc geef en deze word geopend met mijn programma. Dit lukt nog wel, openen met en dan het programma selecteren. Wat alleen niet lukt en wel mijn bedoeling is, dat als ik de template open met mijn eigen programma deze dan de locatie van de template op kan vragen of iets en dus opstart met de betreffende template ingeladen.

Ik heb al hier en daar rond gekeken en gezocht maar kan er nergens iets over vinden.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Afaik wordt als je openen met doet het bestand zo geopend:

c:\path\naar\app.exe c:\path\naar\jouw\bestand.abc

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 17-09 18:39

Matis

Rubber Rocket

Volgens mij wil hij de extensie .abc registreren aan zijn applicatie en de locatie van .abc gebruiken met de manier die jij hierboven beschrijft.

[ Voor 35% gewijzigd door Matis op 06-10-2009 14:16 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Matis schreef op dinsdag 06 oktober 2009 @ 14:15:
Volgens mij wil hij de extensie .abc registreren aan zijn applicatie.
I beg to differ :P
Nu wil ik dus graag dat ik mijn template bijvoorbeeld de extensie .abc geef en deze word geopend met mijn programma. Dit lukt nog wel, openen met en dan het programma selecteren. Wat alleen niet lukt en wel mijn bedoeling is, dat als ik de template open met mijn eigen programma deze dan de locatie van de template op kan vragen of iets en dus opstart met de betreffende template ingeladen.
Dus in z'n int main(string[] args) moet ie args opslaan ergens.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 17-09 18:39

Matis

Rubber Rocket

:O, het is nog vroeg :P
Dus in z'n int main(string[] args) moet ie args opslaan ergens.
Juistem, zoiets dus:
http://msdn.microsoft.com/en-us/library/acy3edy3.aspx

edit; en nog te traag ook :'(

[ Voor 4% gewijzigd door Matis op 06-10-2009 14:19 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Matis schreef op dinsdag 06 oktober 2009 @ 14:19:
[...]

:O, het is nog vroeg :P

[...]

Juistem, zoiets dus:
http://msdn.microsoft.com/en-us/library/acy3edy3.aspx

edit; en nog te traag ook :'(
Juistem2
Maar ik denk dat TS meer is met dit: http://wwwx.cs.unc.edu/~sparkst/howto/cpp_main.php en dan vooral het 2de voorbeeldje, we hebben het namelijk over C++ :P

Of (Microsoft specifiek) http://msdn.microsoft.com...17w5ykft%28VS.100%29.aspx

[ Voor 9% gewijzigd door Snake op 06-10-2009 14:21 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 17-09 18:39

Matis

Rubber Rocket

* Matis stopt er mee :')

Ikzelf ben al heel de dag in C# bezig, misschien is dat het probleem :P

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Aangezien het waarschijnlijk een GUI app is en geen console app (er wordt immers OpenDialog() gebruikt), moet ie de commandline uit z'n WinMain() halen, dan wel gebruik maken van de functie GetCommandLine()

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Je kunt ook met Getmodulefilename je path van je execuabtle ophalen he?


voorbeeld code
http://www.codeproject.com/KB/shell/cgfiletype.aspx --> deze dus.


( http://www.codeproject.com/KB/shell/shellextguide1.aspx )

PS, eigenlijk hoort dit (ook) in de installer, niet in je main applicatie.

[ Voor 25% gewijzigd door leuk_he op 06-10-2009 14:29 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 14-04 10:23
Allemaal alvast bedankt voor de reacties.

Het is het nog niet helemaal maar ben toch een stuk verder:

c:\path\naar\app.exe c:\path\naar\jouw\bestand.abc

Hierdoor weet ik nu dus dat het bestand een argument is, wat ik nog niet wist..

Dus ik wil de opties eigenlijk uitlezen die het bestand mee krijgt. Hier hebben jullie al mooi linkjes voor gestuurd alleen dan het laatste obstakel (denk ik) het is Borland C++ Builder, daar heb ik dus niet de main functie.

Maar in ieder geval voor zover bedankt, ik kan weer verder met zoeken ;)

Acties:
  • 0 Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 14-04 10:23
Ook hier heb ik nu alweer een antwoord op ;)

GetCommandLine() geeft me als result "C:\Users\Ralph\Documents\Borland\test\project.exe" "C:\Users\Ralph\Desktop\stemplate.rtf"

Dit moet dus helemaal goed komen :)

Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Black-Xjuh schreef op dinsdag 06 oktober 2009 @ 14:28:
Hierdoor weet ik nu dus dat het bestand een argument is, wat ik nog niet wist..
Wat gebruikt broland, MFC?

kijk eens naar de members van CWinApp

/Edit... te laat Black-Xjuh kickt zijn topic sneller dan mijn schaduw.

[ Voor 9% gewijzigd door leuk_he op 06-10-2009 14:36 ]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

leuk_he schreef op dinsdag 06 oktober 2009 @ 14:35:
[...]


Wat gebruikt broland, MFC?
Gheh, hoezo tegenstrijdig ;). Borland gebruikt VCL. Die heeft vast ook wel een Application klasse oid waar je de commandline van kunt opvragen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

.oisyn schreef op dinsdag 06 oktober 2009 @ 14:40:
[...]

Gheh, hoezo tegenstrijdig ;). Borland gebruikt VCL. Die heeft vast ook wel een Application klasse oid waar je de commandline van kunt opvragen.
Borland had eerst eigen OWL classes, daarna hebben ze een licentie genomen op MFC... Maar dat is misschien heel lang geleden....

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
VCL heeft een Application class, wat ik me nog herrinner van Delphi 7 en Borland C++ 5. VCL library is namelijk hetzelfde in beide talen.

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


Acties:
  • 0 Henk 'm!

  • schoene
  • Registratie: Maart 2003
  • Laatst online: 20:41
Om in VCL de parameters te overlopen, kan je de functies ParamCount en ParamStr gebruiken:

C++:
1
2
3
4
5
for (int i = 1; i <= ParamCount (); i++)
    {
    AnsiString parameter = ParamStr (i);
    //...
    }

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
schoene schreef op dinsdag 06 oktober 2009 @ 15:15:
Om in VCL de parameters te overlopen, kan je de functies ParamCount en ParamStr gebruiken:

C++:
1
2
3
4
5
for (int i = 1; i <= ParamCount (); i++)
    {
    AnsiString parameter = ParamStr (i);
    //...
    }
Begint die echt bij 1?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 12:16
Als het de Delphi afgeleide versie is wel ja

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, hij begint bij 0. Alleen 0 is je executable zelf, dus de parameters zelf beginnen bij 1.

[ Voor 20% gewijzigd door .oisyn op 06-10-2009 15:28 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
Wikipedia: Visual Component Library wat het dus altijd was omdat het in Object Pascal is ontwikkeld.

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
.oisyn schreef op dinsdag 06 oktober 2009 @ 15:27:
Nee, hij begint bij 0. Alleen 0 is je executable zelf, dus de parameters zelf beginnen bij 1.
Normaal wel maar dan zou < ParamCount hier toch op z'n plaats zijn lijkt me. Dat of ParamStr en ParamCount passen niet bij elkaar.

[edit]
Blijkbaar niet dus ... http://delphi.about.com/library/rtl/blrtlParamCount.htm

[ Voor 11% gewijzigd door farlane op 06-10-2009 15:38 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 14-04 10:23
Het is gelukt,

code:
1
2
3
4
5
6
7
8
9
10
11
12
strcpy(tmp, GetCommandLine());

for (src_pos = 0; src_pos < strlen(tmp)-1; src_pos++) {
    if (reading == true) {
        loc[tmp_pos] = tmp[src_pos];
        tmp_pos++;
    }
    else if ((tmp[src_pos] == '"') && (tmp[src_pos+1] == ' ') && (tmp[src_pos+2] == '"')) {
        src_pos += 2;
        reading = true;
    }
}


Op deze manier sla ik de command line dus op in tmp welke ik vervolgens splits op [ " " ] en het argument met het path naar het bestand over hou.

Is deze dan later gelijk aan niks (programma direct opgestart) dan komt er een openDialog(). Het is dus inderdaad de op Delphi gebaseerde versie.

[ Voor 9% gewijzigd door Black-Xjuh op 06-10-2009 15:35 ]


Acties:
  • 0 Henk 'm!

  • Fiander
  • Registratie: Februari 2001
  • Laatst online: 28-05 12:35
Black-Xjuh schreef op dinsdag 06 oktober 2009 @ 15:33:
Op deze manier sla ik de command line dus op in tmp welke ik vervolgens splits op [ " " ] en het argument met het path naar het bestand over hou.
Ga je op deze manier dan geen problemen krijgen op het moment dat je folders ( of bestanden ) met spaties tegen komt ?

Deze sig is een manueel virus!! Als je dit leest heb je het. Mail dit bericht naar iedereen die je kent, en verwijder alle bestanden van je computer.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Black-Xjuh schreef op dinsdag 06 oktober 2009 @ 15:33:
Het is gelukt,

code:
1
2
3
4
5
6
7
8
9
10
11
12
strcpy(tmp, GetCommandLine());

for (src_pos = 0; src_pos < strlen(tmp)-1; src_pos++) {
    if (reading == true) {
        loc[tmp_pos] = tmp[src_pos];
        tmp_pos++;
    }
    else if ((tmp[src_pos] == '"') && (tmp[src_pos+1] == ' ') && (tmp[src_pos+2] == '"')) {
        src_pos += 2;
        reading = true;
    }
}
Ik zou gewoon CommandLineToArgv() gebruiken
.edit: oh wacht, daar bestaat geen ANSI versie van. Nou ja, het is natuurlijk sowieso niet meer van deze tijd om ANSI strings te gebruiken ;)

[ Voor 12% gewijzigd door .oisyn op 06-10-2009 15:45 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Black-Xjuh
  • Registratie: Oktober 2002
  • Laatst online: 14-04 10:23
Fiander schreef op dinsdag 06 oktober 2009 @ 15:38:
[...]


Ga je op deze manier dan geen problemen krijgen op het moment dat je folders ( of bestanden ) met spaties tegen komt ?
Dat zo en zo niet, ik controleer niet op 'spatie' maar op 'quote spatie quote'.

Het is overigens al veranderd naar:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
        if (ParamCount() > 0) {
                strcpy(path, ParamStr(1).c_str());
        }
        else {
            if (OpenDialog1->Execute()) {
                try {
                                strcpy(path, OpenDialog1->FileName.c_str());
                }
                __finally {

                }
            }
        }
Pagina: 1