redwraith
Goto Top

VB.NET Quali von ausgelesenen Icons zu schlecht ?

Hallo Freunde, Ich hab mal wieder was !

Ich habe mittlerweile einige kleine Progrämmchen geschrieben und da es auf unserem Netzlaufwerk langsam undurchsichtig wird und damit unsere Benutzer nicht x Shortcuts auf dem Desktop haben müssen, habe ich mich dazu entschlossen, meinen Programmen ein Menü vorzuschalten, aus dem man dann die anderen Programme starten kann.

Das Menüprogramm läd beim Start eine Configdatei, in der steht, welche Programme mit welcher URL aufgerufen wird.
Im Menü wird dann zu jedem Programm der Programmtitel und das -Icon angezeigt. Das funktioniert auch wunderbar,
allerdings ist die Qualität der Icons hundsmiserabel. Sie sind total verpixelt und werden zu klein angezeigt, obwohl
die Originale deutlich größer/besser aussehen.

So sehen die Bilder im Menü aus:
Menü

So sieht eine Exe aus, aus der das Bild ausgelesen wird, im Explorer:
Explorer

Und hier nochmal das Originalbild, wie ich es in das Projekt einfüge:
Original

Ich kann auf Imageshack keine ICOs hochladen, deswegen hier als PNG. das ICO sieht aber genauso aus.

Also nochmal der Ablauf:

Das ICO wird in das Projekt Rechnungsausgabe eingebunden und dann in die Assembly Rechnungsausgabe.exe kompiliert.
Von dort wird es dann von Menu.exe ausgelesen. Der Quellcode dafür geht in etwa so:

        Dim info As IO.FileInfo

        If IO.File.Exists(m_pfad) Then
            info = New IO.FileInfo(Me.m_pfad)
            Me.Image = Drawing.Icon.ExtractAssociatedIcon(info.FullName).ToBitmap
            Me.ImageAlign = ContentAlignment.MiddleLeft
            Me.Text = "          " & Me.Bez  
            Me.TextAlign = ContentAlignment.MiddleLeft
        End If

Die Funktion ist teil einer Klasse, die von Button abgeleitet wird.

Ich hab zuerst gedacht, dass die Bilder vielleicht in den Button hineingequetscht werden, aber ich kann die Buttons so groß machen wie ich will, größer werden die Icons davon auch nicht.


Ich hoffe ihr könnt mir helfen

Grüße, Tim

Content-ID: 137956

Url: https://administrator.de/contentid/137956

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

76109
76109 11.03.2010 um 10:32:50 Uhr
Goto Top
Hallo RedWraith!

Die Icon's haben verschiedene Formate: 16x16, 32x32, 48x48

Siehe Dir mal diese Freeware-Tool zum bearbeiten und erstellen von Icon's an. http://www.chip.de/downloads/IcoFX_28266149.html

Das Programm kann u.a. Icon's aus *.DLL und *.EXE importieren und es stehen Dir verschiedene Bildformate *.ico *.bmp, *.gif.... zur Verfügung.

Gruß Dieter
RedWraith
RedWraith 11.03.2010 um 13:16:32 Uhr
Goto Top
Hallo Dieter !

Danke für eine Antwort

Die PNGs sind alle 48x48x32bpp, die ICOs, die ich aus den PNGs erstellt habe sind ebenfalls 48x48x32bpp und wenn ich dein vorgeschlagenes Programm benutze um eines der ICOs aus einer Assembly zurückzuholen, so sind sie immernoch 48x48x32bpp. Es liegt nicht an der Bildgröße, die werden erst verstümmelt, wenn VB sie in die Finger kriegt.


EDIT: Es sieht so aus, als würden die ICOs von der Extract-Methode immer auf 32x32 gedrückt, egal ob sie größer oder kleiner sind.
76109
76109 11.03.2010 um 14:08:17 Uhr
Goto Top
Hallo RedWraith!

Wenn ich mich recht erinnere, dann kann man in dem Ico-Programm auch die Größe verändern?

Mit VB-NET habe ich noch nichts gemacht, aber ich frage mich trotzdem, ob Du die Extract-ToBitmap-Funktion überhaupt brauchst?

In einer Excel-UserForm kann ich z.B. verschiedene Bildformate direkt über die Button-Eigenschaften importieren, geht das in VB-NET nicht?

Gruß Dieter
RedWraith
RedWraith 11.03.2010 um 14:50:36 Uhr
Goto Top
Hallo Dieter !

Klar kann ich das, aber darum geht es direkt nicht.
Das Programm soll ein Menü erstellen und zwar dynamisch aus einer XML Datei.
Ich möchte später Programme einfach hinzufügen bzw. wieder entfernen können ohne das Programm neu kompilieren zu müssen.

Dem Programm liegt so eine xml vor:
<?xml version="1.0" encoding="utf-8"?> 
<Menu>
	<Eintrag Name="Auftragsplanung" Pfad="Vorerfassung\Vorerfassung.exe"/> 
	<Eintrag Name="Materiallagerliste" Pfad="Materiallagerliste\icon.lnk"/> 
	<Eintrag Name="GestellStatus" Pfad="Gestellstatus\Gestellstatus.exe"/> 
	<Eintrag Name="Kundenkarten" Pfad="Kundenkarten\Kundenkarten.exe"/> 
	<Eintrag Name="Rechnungsausgabe" Pfad="Rechnungsausgabe\Rechnungsausgabe.exe"/> 
	<Eintrag Name="Packzettel" Pfad="Packzettel\Packzettel.exe"/> 
	<Eintrag Name="Produktionsstatistik" Pfad="Produktionsstatistik\ProdStat.exe"/> 
</Menu>

und Menüpunkte samt Bildchen sollen dann automatisch erzeugt werden. Klar könnte ich die ICOs auch in einen extra Ordner stecken und dann auch in der Config angeben, aber das würde wieder zu kompliziert, zumal das Menü auch Programme aufrufen, von denen ich das ICO nicht habe, weil ich es eben nicht geschrieben hab.
76109
76109 11.03.2010 um 15:02:27 Uhr
Goto Top
Hallo RedWraith!

Ok, hab's verstanden. War auch nur so ein Gedanke und wenn ich mir Deinen Eröffnungs-Beitrag nochmal durchlese, wird's mir auch gleich wieder bewusst, dass das dann natürlich Blödsinn istface-wink

Gruß Dieter
RedWraith
RedWraith 11.03.2010 um 15:09:11 Uhr
Goto Top
Tja ich hab nebenbei das Internet durchforstet und bin auf eine Handvoll Leute getroffen, die wohl dasselbe Problem haben/hatten. Aber keiner Hat eine Lösung gefunden. Ich werde als Nächstes mal versuchen, das Extrahieren nicht über .NET zu realisieren, sondern den Umweg über die API gehen.