Ich habe ein Programm, welches Icons per Create("Icon" auf das Hauptfenster zeichnet. Die haben aber eine deifinierte Größe, in meinem Fall 32*32. Kann man die Größe beeinflussen?
Icongröße im Programm ändern
-
-
-
Keiner? Vielleicht kann Roland noch 2 Parameter für die Größe einführen, das ist doch sicher nur ein Static mit Icon. Wäre auch eine gute Erweiterung für DrawIcon...
-
In der Hilfe steht zwar, daß DrawSizedPic() auch .ico unterstützt,
tut es aber nicht. Wenn man das Handle eines Icons übergibt,
gibt es einen Fehler -> Falscher Parameter (1. x-Koordinate).Ich habe es jetzt mal über einen Umweg probiert :
Zuerst das Icon in eine SpeicherBitmap kopieren
(StartPaint - 1). Und dann als Bitmap wieder raus.Code
Alles anzeigenindow 600, 400 Declare Handle ico1, ico2 ico1 = Create("hIcon", "A") Mcls 100, 100 StartPaint - 1 DrawIcon ico1, 10, 10 EndPaint ico2 = Create("hSizedPic", 0, "&MEMBMP", 100, 100; 0) DrawSizedPic ico2, 100, 100 - 400, 400; 0 WaitKey
Ist zwar im Moment etwas verzerrt.
Experimentiere mal damit. Vielleicht bekommst du ja was brauchbares heraus. -
Hm, das geht zwar grundsätzlich, aber das Icon wird dabei vergrößert. Icons sind oft in mehreren Größen vorhanden, damit umgeht man das Strecken.
-
Per API: ExtractIconEx
Ich denke mal, irgendwo wirste schon ein Beispiel finden, da ich mit XProfan nichts mehr mache, jedenfalls im moment.
-
Um das zu vermeiden, mußt du wohl eine vorhandene Icongröße nehmen.
Das Strecken jedenfalls geht auch mit der API nicht besser.Code
Alles anzeigen/* https://msdn.microsoft.com/de-de/library/windows/desktop/ms648065(v=vs.85).aspx BOOL WINAPI DrawIconEx( _In_ HDC hdc, _In_ int xLeft, _In_ int yTop, _In_ HICON hIcon, _In_ int cxWidth, _In_ int cyWidth, _In_ UINT istepIfAniCur, _In_opt_ HBRUSH hbrFlickerFreeDraw, _In_ UINT diFlags ); */ Def DrawIconEx(9) !"USER32", "DrawIconEx" Window 800, 600 Declare Handle ico1, ico2, hWin&, x%, y%, dx%, dy% x% = 10 y% = 100 dx% = 8 dy% = 8 ico1 = Create("hIcon", "A") WhileLoop 1, 10 DrawIconEx(%HDC, x%, y%, ico1, (dx% * &LOOP), (dy% * &LOOP), 0, 0, $0003) Inc x%, (dx% * &LOOP) + 10 EndWhile WaitKey
Hier muß man statt des Fensters (%HWnd) den Device Context angeben (%HDC).
-
DrawIconEx sieht vielversprechend aus, das werde ich mal probieren. Danke.
-
vielleicht kann man noch mit den diFlags experimentieren.
-
ich lese es mir mal im MSDN durch sobald ich Zeit habe.
-
Hallo Jac
Habe mir vor einger Zeit diesen Code geschrieben:CodePROC SETZE_WAHL_ICON DECLARE b_icon& PARAMETERS b_handle&,b_icon$,ix%,iy%,ib%,ih% b_icon& = CREATE("ICON",b_handle&,b_icon$,0,0) SetWindowPos b_icon& =0,0-0,0;0 SetWindowPos b_icon& =ix%,iy%-ib%,ih%;0 ENDPROC
Parameter sind:
Fenster oder Button, Icon-Name, StartX, StartY, Breite, Höhe
Die Profan_icons können getauscht werden und die Grösse bleibt erhalten.
Hoffe, ich konnte helfen -
Hallo Altprofaner,
das probiere ich auch mal, aber ich glaube da wird auch jr gestreckt. Mein Icon liegt in der EXE in verschiedenen Größen vor und ich will das Icon einer definierten Größe laden. Die profaninternen Funktionen nutzen aber immer die im System voreingestellte Größe. -
Beide Varianten funktionieren, aber sowohl DrawIconEx als auch die Funktion von Altprofaner stretchen nur das Icon der Standardgröße.
-
Hallo Altprofaner,
das probiere ich auch mal, aber ich glaube da wird auch jr gestreckt. Mein Icon liegt in der EXE in verschiedenen Größen vor und ich will das Icon einer definierten Größe laden. Die profaninternen Funktionen nutzen aber immer die im System voreingestellte Größe.Kann sein, daß Windows hier immer die Standardgröße verwendet.
Wäre es nicht einfacher, hier einen Iconeditor (z.B. icoFX gibt es sogar noch als Freeware)
zu verwenden ? Da könnte man aus einem Icon eine Bitmap machen, oder bei mehreren
eine ImageList, wie die TOOLBAR32.
Bitmaps sind evtl. besser zu handhaben. Wenn man dann noch einen Resourcenhacker
zu Hilfe nimmt, kann man sogar einzelne Bilder austauschen bzw. einfügen. Die Arbeit muß
man halt zweimal machen : im Interpreter und in der Runtime. -
Hallo Heinz.
Bitmap ist blöd, wegen der Transparenz. Den Interpreter nutze ich eh nie, das ist kein Problem...
Ich muss mal schauen was passiert, wenn ein Icon nur in einer Größe, nämlich der von mir gewünschten, in der EXE vorliegt. -
Also, ich hab jetzt mal das A-ico in einen Iconeditor geladen
und es vergrößert und unter einem anderen Resourcennamen
wieder gespeichert.Es wird dann auch mit richtiger Größe angezeigt.
Ein Icon ist halt ein Pixelbild und wird halt, wenn es größer
wird, noch pixeliger. Aber, wenn du das Icon in der für dich
richtigen Größe ja hast und es dir gefällt, dürfte deinem
Vorhaben nichts mehr im Wege stehen. -
Ich hab die Icons in der Exe ersetzt. Die neuen kommen in 4 Größen von 16*16 bis 64*64. Wenn ich das gewünschte Icon nur als 64*64 speicher dann gehts vielleicht.
-
Warum nimmst Du denn, die von mir genannte API nicht? Da kannste sagen, welche grösse Du möchtest und wenn die dann enthalten ist, bzw. ansonsten die am nächsten kommt. Ansonsten kann man ICONS auch über den Namen bzw. Nummer laden (FindResource, LockResource usw.).
-
Hat nicht funktioniert.
-
Da bleibt wohl nur, die Anzeigegrößen, die Windows benutzt,
von Hand per API zu setzen.
https://msdn.microsoft.com/en-us/library/…7(v=vs.85).aspx -
Hallo,
Da es in XProfan meist mehrere Möglichkeiten gibt,
habe ich das ganze mal mit einer ImageListe probiert.
Da man beim Erstellen einer Imageliste ja auch die
Bildgröße vorgeben muß, habe ich die Icons mal
dorthin kopiert (hier mal auf 64 X 64 Pixel) :Code
Alles anzeigenDeclare Handle ilist, ico Declare Long x, y, String Namen[21] Namen[0] = "A" Namen[1] = "BAUM" Namen[2] = "COMPUTER" Namen[3] = "DOS" Namen[4] = "DRUCKER" Namen[5] = "EDITOR" Namen[6] = "EIMER" Namen[7] = "EIS" Namen[8] = "FILEICON" Namen[9] = "GESICHT" Namen[10] = "KNOPF1" Namen[11] = "KNOPF2" Namen[12] = "MUELL" Namen[13] = "MUENZE" Namen[14] = "PROFAN" Namen[15] = "SAND" Namen[16] = "STEIN" Namen[17] = "TEXT" Namen[18] = "WASSER" Namen[19] = "WEG" Namen[20] = "WINDOWS" Window 800, 600 ilist = Create("ImageList", 64, 64) x = 50 y = 50 WhileLoop 0, 20 ico = Create("hIcon", Namen[&LOOP]) ImageList("AddIcon", ilist, ico) EndWhile WhileLoop 0, 20 DrawIcon ilist, &LOOP, x, y If x > 500 x = 50 Inc y, 100 Else Inc x, 100 EndIf EndWhile WaitKey DeleteObject ilist End
Das Ergebnis sieht schon mal ganz passabel aus. Die ImageListe scheint
da auf einem anderen Wege die Bilder zu vergrößern.
Vielleicht ist das ja eine Option für dich.PS: Wegen der Transparenz kann man ja auch
ImageList("GetICon",...)
nehmen. Das müßtest du noch ausprobieren. -
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!