Icon in Xbase++

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Icon in Xbase++

Beitrag von AUGE_OHR »

hi,

wenn ich mir so die "modernen" Ico ansehe stelle ich fest das es immer
mehrere in verschiedenen Grössen sind ... warum / wofür ?

ein Ico kann ich als oDlg:Icon, als XBPSTATIC_TYPE_ICON in XbpStatic
und als XBPCOL_TYPE_ICON in einer XbpColumne benutzen ...wo noch?

Frage:wie kann ich, mit Xbase++, ein *.Ico in ein 32x32 BMP umwandeln?

Die Frage stellt sich nun wenn ich ein Ico habe und das für XbpPushbutton
verwenden will (was ja nicht geht).
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jimmy,
ganz einfach:
  • Unterschiedliche Bildschirmauflösungen
  • Icon für den Desktop bzw. Startmenüeintrag und für das Symbol in der Titelleiste bzw. auf der Startleiste im minimierten Zustand
  • Unterschiedliche Farbtiefen
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,

ok ... aber das ganze geht doch im Prinzip auch wenn man nur ein 32x32
grosses ICO hat ?

wie kann ich das ganze nun für Xbase++ nutzen ? Der Grund ist das man
zwar viele ICO findet man aber für Xbase++ BMP,JPG,GIF oder PNG
braucht.
Frage:wie kann ich, mit Xbase++, ein *.Ico in ein 32x32 BMP umwandeln?
ich habe zwar eine Möglichkeit gefunden, jedoch muss ich dazu immer
erst "Vorarbeit" leisten. Ich kann *.ICO nur über die *.ARC Resource
Datei in Xbase++ einbinden ... eine :loadfile gibt mir nur "schwarz".

Wenn ich es also in eine *.ARC habe, dann kann ich es auf eine XbpStatic
anzeigen. Was ich nun "sehe" kann ich ja "photographieren" mit Xbase++

Code: Alles auswählen

#include "gra.ch"
#include "xbp.ch"
#include "Appevent.ch"
#include "Directry.ch"
#include "common.ch"

PROCEDURE Appsys
RETURN

PROCEDURE Main
LOCAL nEvent, mp1, mp2, oXbp
LOCAL oDlg, oDraw, oStatic, cText,oText

   oDlg          := XbpDialog():new()
   oDlg:title    := "Test Static Controls"
   oDlg:create( ,, {50,50}, {500,300} )
   oDraw := oDlg:drawingArea

   // XbpStatic als System Icon
   oStatic         := XbpStatic():new( oDraw,, {100,100}, {32,32}  )
   oStatic:type    := XBPSTATIC_TYPE_ICON
   oStatic:caption := 0001
   oStatic:create()

   oText         := XbpStatic():new( oDraw,, {10,10}, {280,32}  )
   oText:type    := XBPSTATIC_TYPE_TEXT
   oText:caption := "*.ICO"
   oText:create()

   ShowRes(oStatic,oText)

*   nEvent := 0
*   DO WHILE nEvent <> xbeP_Close
*      nEvent := AppEvent( @mp1, @mp2, @oXbp )
*      oXbp:handleEvent( nEvent, mp1, mp2 )
*   ENDDO

RETURN

PROCEDURE ShowRes(oStatic,oText)
LOCAL n
LOCAL aRes  := RESArray()
LOCAL nLen  := LEN(aRes)
LOCAL cFile
LOCAL aSize := oStatic:currentsize()

   FOR n:= 1 TO nLen
      IF aRes[n][2] = "O"
         cFile := STRTRAN(UPPER(aRes[n][3]),".ICO",".BMP")
         oText:Setcaption(cFile)
*         oStatic:Setcaption(n)
         oStatic:Setcaption( aRes[n][1] )
         SLEEP(10)

         MAKEBMP(oStatic,{0,0,aSize[1],aSize[2]},cFile)
      ENDIF
   NEXT

RETURN

PROCEDURE MAKEBMP(oSourceArea,aRect,cFile,InOut)
LOCAL oTargetPS := XbpPresSpace():new():create()
LOCAL oBitmap   := XbpBitmap():new():create()
LOCAL oThumb    := XbpBitmap():new():create()
LOCAL oPS       := NIL
LOCAL nSizeX    := aRect[3] - aRect[1]
LOCAL nSizeY    := aRect[4] - aRect[2]
LOCAL cSavePic  := STRTRAN(cFile,".ICO",".BMP")

   DEFAULT InOut TO 1

   oPS := oSourceArea:lockPS()

   IF InOut = 0
      oBitmap:presSpace(oTargetPS)
      oBitmap:make(nSizeX,nSizeY)
      GraBitBlt(oTargetPS,oPS,{0,0,nSizeX,nSizeY},aRect)

   ELSE
      oThumb:presSpace(oTargetPS)
      oThumb:make(32,32)
      GraBitBlt(oTargetPS,oPS,{0,0,32,32},;
                      {0,0,nSizeX - 1,nSizeY - 1},;
                       GRA_BLT_ROP_SRCPAINT,GRA_BLT_BBO_IGNORE)
   ENDIF

   oSourceArea:unLockPS(oPS)
   Sleep(0)
   oTargetPS:destroy()
   oTargetPS := NIL
   oPS       := NIL

   IF FILE(cSavePic)
      FERASE(cSavePic)
   ENDIF
   oThumb:SaveFile(cSavePic,XBPBMP_FORMAT_WIN3X)

   oThumb:Destroy()
   oThumb := NIL

   // destroy it
   oBitmap:Destroy()
   oBitmap := NIL

RETURN

FUNCTION RESArray()
LOCAL aRet := {;
     {0001,"O", "administrative-tools.ico"},;
     {0002,"O", "Breads.ico"},;
     {0003,"O", "Cocktail.ico"},;
     {0004,"O", "coffeecup.ico"},;
     {0005,"O", "coffeepot.ico"},;
     {0006,"O", "Config.ico"},;
     {0007,"O", "configure.ico"},;
     {0008,"O", "Control Panel 1.ico"},;
     {0009,"O", "Control Panel.ico"},;
     {0010,"O", "Control Panel2.ico"},;
     {0011,"O", "Copy.ico"},;
     {0012,"O", "Cpu.ico"},;
     {0013,"O", "Cut.ico"},;
     {0014,"O", "decrypted.ico"},;
     {0015,"O", "Delete.ico"},;
     {0016,"O", "Doc.ico"},;
     {0017,"O", "Documents and Settings.ico"},;
     {0018,"O", "Doc_edit.ico"},;
     {0019,"O", "doc_yellow.ico"},;
     {0020,"O", "doc_yellow_edit.ico"},;
     {0021,"O", "eCash.ico"},;
     {0022,"O", "edit.ico"},;
     {0023,"O", "editcut.ico"},;
     {0024,"O", "editdelete.ico"},;
     {0025,"O", "encrypted.ico"},;
     {0026,"O", "Favourites.ico"},;
     {0027,"O", "filenew.ico"},;
     {0028,"O", "fileprint.ico"},;
     {0029,"O", "filequickprint.ico"},;
     {0030,"O", "Find 1.ico"},;
     {0031,"O", "gimp.ico"},;
     {0032,"O", "Green light.ico"},;
     {0033,"O", "inBox.ico"},;
     {0034,"O", "kcalc.ico"},;
     {0035,"O", "kcmpci.ico"},;
     {0036,"O", "kcmsound.ico"},;
     {0037,"O", "kcoloredit.ico"},;
     {0038,"O", "kcontrol.ico"},;
     {0039,"O", "kuser.ico"},;
     {0040,"O", "laptop_battery.ico"},;
     {0041,"O", "launch.ico"},;
     {0042,"O", "List.ico"},;
     {0043,"N", "LorryGreen.ico"},;
     {0044,"O", "mail_rokey.net.ico"},;
     {0045,"O", "misc.ico"},;
     {0046,"O", "mobile telephone.ico"},;
     {0047,"O", "mouse.ico"},;
     {0048,"O", "mystery machine front.ico"},;
     {0049,"O", "mystery machine lateral .ico"},;
     {0050,"O", "mystery machine.ico"},;
     {0051,"O", "New Doc.ico"},;
     {0052,"O", "outBox.ico"},;
     {0053,"O", "package_toys.ico"},;
     {0054,"O", "password.ico"},;
     {0055,"O", "Paste.ico"},;
     {0056,"O", "pen.ico"},;
     {0057,"O", "pumpkin.ico"},;
     {0058,"O", "r2_dragon.ico"},;
     {0059,"O", "Radiactive.ico"},;
     {0060,"O", "Red light.ico"},;
     {0061,"O", "reload.ico"},;
     {0062,"O", "rescue_antivirus.ico"},;
     {0063,"O", "Save.ico"},;
     {0064,"O", "scaner.ico"},;
     {0065,"O", "Security 2.ico"},;
     {0066,"O", "sign_dollar_32.ico"},;
     {0067,"O", "star.ico"},;
     {0068,"O", "Stop 2.ico"},;
     {0069,"O", "Stop Sign.ico"},;
     {0070,"O", "toilet paper.ico"},;
     {0071,"N", "TruckYellow.ico"},;
     {0072,"O", "View Doc.ico"},;
     {0073,"O", "Write.ico"},;
     {0074,"O", "write_document.ico"},;
     {0075,"O", "Yellow light.ico"}}

RETURN aRet

*
*
*
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

Icons sind genau für die Zwecke da (Programmicon klein in Liste, größer als Symbole etc...) die du beschrieben hast.
Wenn nur ein Icon vorliegt, muss Windows die Zwischengrößen automatisch umrechnen, das kann noch gut aussehen, meist jedoch nicht besonders.
Daher sollte man verschiedene Standardgrößen anbieten.

Icons mache ich normalerweise mit IconEdit32 selbst - oder ändere welche ab, die ich mit IconJack besorgt habe ( :oops: psst ;-) ) ...

Mit IrfanView kann man ein Icon öffnen und ein BMP daraus abspeichern, ich habe es gerade probiert und es ging gut :D
Gruß
Hubert
Antworten