AnsiStartsStr?



  • ich habe folgende "kleine" routine erstellt die bei meinem neuen php-editor zu verschiedenen themen direkt das phpmanual aufrufen soll:

    AnsiString File = "";
       AnsiString Func = SEeditor->WordAtCursor;
    
       if (AnsiStartsStr("$_GET",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.get";
       }
       else if (AnsiStartsStr("$_POST",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.post";
       }
       else if (AnsiStartsStr("$_COOKIE",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.cookies";
       }
       else if (AnsiStartsStr("$_FILES",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.files";
       }
       else if (AnsiStartsStr("$_SERVER",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.server";
       }
       else if (AnsiStartsStr("$_GLOBALS",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.globals";
       }
       else if (AnsiStartsStr("$_ENV",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.environment";
       }
       else if (AnsiStartsStr("$_REQUEST",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.request";
       }
       else if (AnsiStartsStr("$_SESSION",Func))
       {
          File = "phpmanual/reserved.variables.html#reserved.variables.session";
       }
       else if (AnsiStartsText("$",Func))
       {
          File = "phpmanual/language.variables.html";
       }
       else if (AnsiStartsText("if",Func))
       {
          File = "phpmanual/control-structures.html#control-structures.if";
       }
       else if (AnsiStartsText("elseif",Func) || AnsiStartsText("else if",Func))
       {
          File = "phpmanual/control-structures.elseif.html";
       }
       else if (AnsiStartsText("else",Func))
       {
          File = "phpmanual/control-structures.else.html";
       }
       else if (AnsiStartsText("do",Func))
       {
          File = "phpmanual/control-structures.do.while.html";
       }
       else if (AnsiStartsText("foreach",Func))
       {
          File = "phpmanual/control-structures.foreach.html";
       }
       else if (AnsiStartsText("for",Func))
       {
          File = "phpmanual/control-structures.for.html";
       }
       else if (AnsiStartsText("break",Func))
       {
          File = "phpmanual/control-structures.break.html";
       }
       else if (AnsiStartsText("continue",Func))
       {
          File = "phpmanual/control-structures.continue.html";
       }
       else if (AnsiStartsText("switch",Func) || AnsiStartsText("case",Func) || AnsiStartsText("default",Func))
       {
          File = "phpmanual/control-structures.switch.html";
       }
       else if (AnsiStartsText("declare",Func))
       {
          File = "phpmanual/control-structures.declare.html";
       }
       else if (AnsiStartsText("return",Func))
       {
          File = "phpmanual/control-structures.return.html";
       }
       else if (AnsiStartsText("function",Func))
       {
          File = "phpmanual/functions.html";
       }
       else if (AnsiStartsText("class",Func))
       {
          File = "phpmanual/language.oop.html";
       }
       else if (FileExists(ExtractFilePath(Application->ExeName)+"phpmanual/function."+AnsiReplaceStr(Func,"_","-")+".html"))
       {
          File = "phpmanual/function."+AnsiReplaceStr(Func,"_","-")+".html";
       }
       if (File != "")
       {
          AnsiString open = ExtractFilePath(Application->ExeName)+ File;
          ShellExecute(Handle, "open", open.c_str(), NULL,NULL,SW_SHOWDEFAULT);
       }
    

    nur leider springt das programm nur auf die letzt möglichkeit mit dem FileExists an. der rest scheint nie zuzutreffen, was es aber eigentlich müsste?
    seht ihr vielleicht warum?


  • Mod

    Hallo

    und was spricht der Debugger !

    ich vermute mal:

    das erste if ist true
    und dann geht er zum File != ""

    MfG
    Klaus



  • Dass AnsiStartsStr case-sensitive ist hast du bedacht?
    Ansonsten wäre halt mal zu kontrollieren, was WordAtCursor tatsächlich zurückgibt.



  • Jansen schrieb:

    Dass AnsiStartsStr case-sensitive ist hast du bedacht?
    Ansonsten wäre halt mal zu kontrollieren, was WordAtCursor tatsächlich zurückgibt.

    ja das mit dem casesensitv mache ich sogar extra, da variabeln i php das auch sind.



  • Also ich habe jetzt herausgefunden, dass WordAtCursor bei Variabeln wie $_GET nur "_GET" enthält! das ist aber noch nicht alles, er scheint auch noch probleme mit dem # zu haben, denn bei alle dateien bei dennen ich sowas nicht angeben, funktioniert es jetzt einwandfrei! hat jemand eine lösung für dieses problem?



  • schreib dir doch einfach eine eigene WordAtCursor Routine...



  • das könnte ich schon machen, aber das löst dann immernochnicht das problem, dass ich keine dateien öffnen kann die nach der extension noch ein # haben.
    bsp:
    C:/bla/hashmark.html#hash35



  • Du musst dir vor Augen halten, dass ShellExecute einen reinen Dateinamen erwartet, du aber URLs angibst. Das kann so nicht funktionieren.
    Du wirst nicht um den expliziten Aufruf der Browser-Executable herumkommen, mit Übergabe der URL als Parameter.
    Oder du benutzt halt die CppWebbrowser-Komponente.
    Oder du besorgst dir eine Version des PHP-Handbuches, in dem jede Funktion in einer eigenen HTML-Datei steht.



  • da steht jede funktion in einer extra datei.... nur die informationen über _GET und _POST variabeln stehen in einer eizelnen datei...



  • Sieh nochmal genau hin.
    Ganz offensichtlich stehen z.B. die ersten neun Einträge deines Beispieles alle in derselben Datei (reserved.variables.html), das Anspringen der einzelnen Einträge erfolgt dann per HTML-Syntax.
    Und mit genau dieser Syntax kann der implizite ShellExecute-Aufruf nichts anfangen, das kann nur ein Browser auswerten.

    Das alles hat aber auch nichts mehr mit dem Thema des Threads zu tun ...



  • Konsti schrieb:

    das könnte ich schon machen, aber das löst dann immernochnicht das problem, dass ich keine dateien öffnen kann die nach der extension noch ein # haben.
    bsp:
    C:/bla/hashmark.html#hash35



  • Die Datei heisst definitiv

    phpmanual/reserved.variables.html

    und nicht

    phpmanual/reserved.variables.html#reserved.variables.cookies

    Versuch mal

    String ergebnis;
    TDdeClientConv* dde=new TDdeClientConv(this);
    dde->SetLink("IExplore","WWW_OpenURL");
    ergebnis=dde->RequestData("DEINE URL"+",,0xffffffff,0x0,,,,");
    delete dde;
    

    Ist zwar dde und damit etwas veraltet.



  • erdgfvr:
    Hat es eine tiefere Bedeutung, dass du diesen alten Thread ausgräbst, aber weder eine Antwort gibst noch eine Frage stellst?


Anmelden zum Antworten