Announcement

Collapse
No announcement yet.

Name/Glyph einer verknüpften Anwendung

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

  • Name/Glyph einer verknüpften Anwendung

    Moin moin,

    Wie kann ich ermitteln, welche Anwendung mit einer Extension verknüpft ist (z.b. .ppt für Powerpoint) und wie kann ich das Icon dieser Anwendung holen.

    Der Hintergrund ist, das ich gerne die Liste der Anhänge einer Mail mit den passenden Bilder aufpeppen will.

  • #2
    hallo!

    die passende exe könnte man anhand der registrierung heraus bekommen. aber für das symbol findest du bei christian marquardt vllt. schon das richtige...

    bye...
    Zuletzt editiert von krasus; 09.09.2007, 01:28.

    Comment


    • #3
      Hierfür ist die Funktion SHGetFileInfo vorgesehen. Das folgende Beispiel zeigt wie das Icon geholt wird und in einem TImage-Objekt angezeigt wird:

      //Icon holen

      SHFILEINFO shinfo;
      SHGetFileInfo("g:\\tespdf.pdf", NULL, &shinfo, sizeof(shinfo), SHGFI_SMALLICON|SHGFI_ICON);

      Das Handle des Icon steht nun in shinfo.hIcon zur Verfügung

      //Icon in TImage-Objekt anzeigen
      TIcon *ic=new TIcon();
      ic->Handle=shinfo.hIcon;
      Image1->Picture->Icon=ic;
      delete ic;

      Wie bekomme ich das Icon in den Glyph eines TSpeedButtons ??

      Comment


      • #4
        garnicht, mußt du erst konvertieren von icon in bitmap

        fred

        Comment


        • #5
          Und wie geht das ???

          Comment


          • #6
            Dieses Beispiel konvertiert ein Symbol (.ICO) in ein Bitmap. Um dieses Beispiel auszuführen, muß das Formular ein Bild, eine Schaltfläche und ein Öffnen-Dialogfeld enthalten. Geben Sie der Schaltfläche den Namen ConvertIcon2Bitmap und fügen Sie zu deren Ereignisbehandlungsroutine OnClick den folgenden Code hinzu.

            void __fastcall TForm1::Button1Click(TObject *Sender)

            {
            OpenDialog1->DefaultExt = ".ICO";
            OpenDialog1->Filter = "Symbole (*.ico)|*.ICO";
            OpenDialog1->Options << ofOverwritePrompt << ofFileMustExist << ofHideReadOnly;
            if (OpenDialog1->Execute())
            {
            TIcon *pi = new TIcon();
            try
            {
            AnsiString as;
            pi->LoadFromFile(OpenDialog1->FileName);
            as = ChangeFileExt(OpenDialog1->FileName,".BMP");
            Image1->Width = pi->Width;
            Image1->Height = pi->Height;
            Image1->Canvas->Draw(0,0,pi);

            Image1->Picture->SaveToFile(as);
            ShowMessage(OpenDialog1->FileName + " Gespeichert auf " + as);
            }
            __finally
            {
            delete pi;
            }
            }
            }

            für deine bedingung

            Image1->Bitmap->Width = ic->Width;
            Image1->Bitmap->Height = ic->Height;
            Image1->Bitmap->Canvas->Draw(0,0,ic);
            SpeedButton->NumGlyph = 1;
            SpeedButton->Glyph->Assign(Image1->Bitmap);

            fred

            Comment


            • #7
              Danke Fred, das funktioniert. Es ist aber nicht so einfach die Bitmap in das Speedbutton richtig einzufügen. (Größe, Position)

              Muss ich mal ein bischen experimentieren

              Comment


              • #8
                Spacing, Margin und dann mit StretchDraw
                Beispiel
                int w = SpedB->Width-2;
                int h = SpedB->Height-2;
                SpeedButton->Glyph->Canvas->StretchDraw( TRect(1,1,w,h), ic);

                mfg
                fred

                Comment


                • #9
                  hallo!

                  das ganze geht auch ohne dem umweg über ein TImage-Objekt...
                  Code:
                  SHFILEINFO shinfo;
                  SHGetFileInfo("c:\\meinedatei.ext", NULL, &shinfo, sizeof(shinfo), SHGFI_SMALLICON|SHGFI_ICON);
                  
                  //Icon in TBitmap-Objekt kopieren
                  TIcon *ic=new TIcon();
                  Graphics::TBitmap *ib=new Graphics::TBitmap();
                  
                  ic->Handle=shinfo.hIcon;
                  ib->Width = ic->Width;
                  ib->Height = ic->Height;
                  ib->Canvas->Draw(0,0,ic);
                  
                  // und nun im DpeedButton anzeigen 
                  SpeedButton1->NumGlyphs = 1;
                  SpeedButton1->Glyph = ib;
                  
                  delete ic, ib;
                  bye!

                  Comment

                  Working...
                  X