Announcement

Collapse
No announcement yet.

@Markus Lemcke und alle anderen COM-Interessierten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • @Markus Lemcke und alle anderen COM-Interessierten

    Hallo Markus,
    hallo ... äh, ihr anderen,

    Hast du deinen Dateimanager nun schon im Kontextmenü drin?
    Ich frage deshalb, weil ich meine Shell-Erweiterung auch gern ... ja: erweitern würde. Mit einem Popup-Menü wie im Fall von WinRAR. Sprich: im Kontextmenü soll zwar ein Eintrag stehen, aber der soll dann meinetwegen zwei neue aufklappen.

    Weiß irgendeiner, wie das geht?
    Insbesondere die Abfrage der verschiedenen Einträge wäre interessant.

    So, und dann hatte ich mal gefragt (im anderen Thread), ob jemand weiß, wie man diesen Rückgabewert bei "SHBrowseForFolder" auslesen kann. Es gibt ja die Möglichkeit, eine Eingabebox anzeigen zu lassen und dort was einzutippen. Aber wo kriege ich dann die Eingabe her? Im Programm. Ich suche gerade die MSDN durch, mal schaun´n.

    Weiß es einer?
    Oder weiß einer, wo´s schon beantwortet wurde?

    Gruß.
    Mathias.

  • #2

    Zum Thema Verzeichnis-Dialoge...

    <pre><p>
    <font color=blue><i>// Callback-Funktion, die bei diversen Ereignissen im Auswahl-Dialog aufgerufen wird</i></font>
    <b>function</b> BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData: LPARAM): Integer; <b>stdcall</b>;
    <b>var</b>
    Filename: <b>array</b> [0..MAX_PATH] <b>of</b> Char;
    Found: Boolean;
    InvFrage: <b>array</b> [0..1023] <b>of</b> Char;
    <b>begin</b>
    <b>case</b> uMsg <b>of</b>
    BFFM_SELCHANGED:
    <b>begin</b>
    Found := False;
    <b>if</b> PItemIDList(lParam) <> <b>nil then</b>
    <b>begin</b>
    FillChar(Filename, SizeOf(Filename), 0);
    Found := SHGetPathFromIDList(PItemIDList(lParam), Filename);
    <b>end</b>;
    SendMessage(hwnd, BFFM_ENABLEOK, 0, Ord(Found));
    Result := 0;
    <b>end</b>;
    BFFM_VALIDATEFAILED:
    <b>begin</b>
    FillChar(InvFrage, SizeOf(InvFrage), 0);
    wvsprintf(InvFrage, ' "%s" ist keine gültige Angabe !!!'#13#10#13#10 +
    ' Neuer Versuch ??? ) ', PChar(@lParam));
    Result := Ord(
    MessageBox(hwnd, InvFrage, <b>nil</b>, MB_ICONQUESTION <b>or</b> MB_RETRYCANCEL) = IDRETRY);
    <b>end</b>;
    <b>else</b>
    Result := 0;
    <b>end</b>;
    <b>end</b>;
    <p>
    <font color=blue><i>// Aufruf in einer eigenen (einfachen) Funktion gekapselt</i></font>
    <b>function</b> BrowseCallbackDemo(Wnd: HWND): <b>string</b>;
    <b>var</b>
    Buffer: <b>array</b> [0..MAX_PATH] <b>of</b> Char;
    Browse: TBrowseInfo;
    IDList: PItemIDList;
    Malloc: IMalloc;
    <b>begin</b>
    Result := '';
    FillChar(Browse, SizeOf(Browse), 0);
    Browse.hwndOwner := Wnd;
    Browse.lpszTitle := 'Browse-Callback Demo...';
    Browse.lpfn := @BrowseCallbackProc;
    Browse.ulFlags := BIF_RETURNONLYFSDIRS <b>or</b> BIF_EDITBOX <b>or</b> BIF_VALIDATE;
    IDList := SHBrowseForFolder(Browse);
    <b>if</b> IDList <> <b>nil then</b>
    <b>begin</b>
    FillChar(Buffer, SizeOf(Buffer), 0);
    <b>if</b> SHGetPathFromIDList(IDList, Buffer) <b>then</b>
    Result := <b>string</b>(Buffer);
    SHGetMalloc(Malloc);
    Malloc.Free(IDList);
    <b>end</b>;
    <b>end</b>;
    <p>
    <font color=blue><i>// let's Test )</i></font>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>begin</b>
    ShowMessage(BrowseCallbackDemo(Handle));
    <b>end</b>;
    <p></pre>

    Das sollte zum Testen / als Vorlage eigentlich reichen.<p>
    Aber Du solltest _unbedingt_ die _aktuellen_ WinAPI-Hilfen ( http://search.microsoft.com/us/dev/default.asp ) zu Rate ziehen.<br>
    Zum Beispiel werden die Edit-Boxen erst ab Shell-Version 4.71 unterstützt (zu gut Deutsch mind. IE 4.0), sollte man halt wissen.<p>

    Gruß Nico

    PS: uses - ShlObj und ActiveX nicht vergessen.

    &#10

    Comment


    • #3
      Hallo Nico,
      das geht ja schneller als das Brezelbacken. )
      Wenn ich das gewusst hätte ...

      So, jetzt fehlt also nur noch ein Punkt auf meiner Wunschliste. Das Menü mit Untereinträgen. Popup-Menü war der falsche Begriff dafür.
      ( (Asche auf mein Haupt.

      Comment


      • #4
        Hallo NicoDE,<br>super Antwort !!!<br>Jetzt habe ich im MSDN herumgestöbert und noch weitere Konstanten für die Dialogkonfiguration gefunden. <br>Z.B. BIF_NEWDIALOGSTYLE <br>
        Diese Konstante ist in der D5 ShlObj noch nicht deklariert. Wo kann ich denn den Wert der Konstanten finden?<br>:-) Jens Schuman

        Comment


        • #5

          Ich habe bei mir auf dem Rechner stets Visual Studio mit aktuellem SP, aber was wichtiger ist, das aktuelle Platform SDK (insbesondere die Header, Warnung, das PSDK ist komplett über 700MB groß) und die diverse Device Driver Kits, die aber wiederum nicht so wichtig sind.<p>
          ...ansonsten einfach fragen.<p>

          Gruß Nico

          PS: die FTP-Adresse vom Platform SDK steht ganz unten auf der M$-Downloadseite, schön unauffällig - als "Notlösung", naja eben M$ ;

          Comment


          • #6
            hi,

            jetzt werde ich hier schon in überschriften namentlich erwähnt

            ne ich habe es noch nicht drin!!

            erstens arbeite ich gerade noch an einem anderen projekt und zweitens habe ich es auch noch nicht ganz verstanden wie es funzt

            gruß

            marku
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment


            • #7
              Hallo,

              das komplette Platform SDK kann direkt über die Haupt-Downloadseite von Microsoft über die Suchfunktionen gefunden werden. Die Downloadseite hat zudem eine ausführliche Beschreibung.
              <pre>
              ...
              // Browsing for directory.
              #define BIF_RETURNONLYFSDIRS 0x0001 // For finding a folder to start document searching
              #define BIF_DONTGOBELOWDOMAIN 0x0002 // For starting the Find Computer
              #define BIF_STATUSTEXT 0x0004 // Top of the dialog has 2 lines of text for BROWSEINFO.lpszTitle and one line if
              // this flag is set. Passing the message BFFM_SETSTATUSTEXTA to the hwnd can set the
              // rest of the text. This is not used with BIF_USENEWUI and BROWSEINFO.lpszTitle gets
              // all three lines of text.
              #define BIF_RETURNFSANCESTORS 0x0008
              #define BIF_EDITBOX 0x0010 // Add an editbox to the dialog
              #define BIF_VALIDATE 0x0020 // insist on valid result (or CANCEL)

              #define BIF_NEWDIALOGSTYLE 0x0040 // Use the new dialog layout with the ability to resize
              // Caller needs to call OleInitialize() before using this API

              #define BIF_USENEWUI (BIF_NEWDIALOGSTYLE | BIF_EDITBOX)

              #define BIF_BROWSEINCLUDEURLS 0x0080 // Allow URLs to be displayed or entered. (Requires BIF_USENEWUI)

              #define BIF_BROWSEFORCOMPUTER 0x1000 // Browsing for Computers.
              #define BIF_BROWSEFORPRINTER 0x2000 // Browsing for Printers
              #define BIF_BROWSEINCLUDEFILES 0x4000 // Browsing for Everything
              #define BIF_SHAREABLE 0x8000 // sharable resources displayed (remote shares, requires BIF_USENEWUI)
              ...
              </pre&gt

              Comment


              • #8
                Leider ist das Setup des Platform SDK's ähnlich aufgebaut, wie das des Internet Explorers. Also eine kleine Setup-Datei zum Installieren, die einfach eine Internet-Verbindung herstellt und die ausgewähnlten Packete aus dem Netz holt.<br>
                Da ich aber ungerne jedesmal (indirekt) downloaden möchte bei jeder Installation, wollte ich die gesamten Dateien auf Platte (bzw CD) haben.<br>
                Deswegen der Hinweis auf den FTP-Ordner ( übrigens ftp://ftp.microsoft.com/developr/platformsdk/ (aktuell /feb2001) ).<p>
                Für alle MSDN-Subscriber ist dies nicht notwendig, da sie die CD mit dem aktuellen PSDK ohnehin bekommen.

                Gruß Nic

                Comment


                • #9
                  @Markus: Du wirst schon in Überschriften erwähnt? Tja, Strafe muss sein ... *lol*

                  @die anderen: das mit dieser Install-Datei, die sich den Rest aus dem Netz holt, scheint so eine (Un-)Sitte zu werden. Oder? Ich meine, Microsoft macht´s vor. Netscape macht es beim Navigator6 ebenso; aber man hat wenigstens die Möglichkeit, alle Dateien lokal zu speichern. Und das geht bei Microsoft nur, wenn man die Download-Adressen kennt.

                  Na ja, was soll´s

                  Comment


                  • #10
                    hi matthias,

                    hmmm... du schreibst hier rein dass du <b>ledig</b> bist <br>
                    ist das nun hier auch noch ne partnervermittlung?<br>
                    dann sollte ich schleunigst erwähnen, dass ich auch noch <b>frei</b> bin !!

                    gruß

                    marku
                    Herzliche Grüße

                    Markus Lemcke
                    barrierefreies Webdesign

                    Comment


                    • #11
                      Oh, das ist nur ein ... äh, Versehen. *g* Das müsste heißen "<b>ledig</b>lich Anfänger" ... :-) Hab´ den Rest wohl vergessen ...

                      Also, an alle Damen: Der Markus ist noch frei ... Wie jetzt? Und was heißt "noch"

                      Comment


                      • #12
                        @Mathias Simmack <b>Super Kommentar!</b> *lach*

                        Comment


                        • #13
                          Bine? Wat denn? *g

                          Comment


                          • #14
                            Hallo NicoDE,<br>unter dem URL ftp://ftp.microsoft.com/developr/platformsdk findet man ja allerhand. Welche Dateien und Verzeichnisse brauche ich eigentlich?<br>:-) Jens Schuman

                            Comment

                            Working...
                            X