API Konstanten in eigenem Messagerequester?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

API Konstanten in eigenem Messagerequester?

Beitrag von Scarabol »

Hallo Leute,

bastel gerade an meinem eigenen Messagerequester und wollte jetzt, da ich das Rad ja nicht neu erfinden will, wie beim Purebasic Messagerequester die API-Konstanten (#MB_ICONERROR, #MB_ICONINFORMATION, ect.) verwenden.
Wie kann ich die Icons so laden, dass sie dann in einem ImageGadget angezeigen lassen kann?

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Code: Alles auswählen

LoadIcon_(0, #IDI_QUESTION)
LoadIcon_(0, #IDI_EXCLAMATION)
LoadIcon_(0, #IDI_HAND)
LoadIcon_(0, #IDI_ASTERISK)
MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Kann ich das mit allen Konstanten machen, die auch unter #MB_ funktionieren?

Danke funktioniert schonmal super
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Scarabol hat geschrieben:Kann ich das mit allen Konstanten machen, die auch unter #MB_ funktionieren?
Wenn es keine Konstanten gibt, reicht es wenn man weiß in welcher DLL
unter welcher ResourceID das Icon erreichbar ist.
Die Icons sind in der "user32.dll", als 101 - 104 enthalten.

Code: Alles auswählen

hModule = OpenLibrary(0, "user32.dll")

Dim Icons(3)

For i = 0 To 3
  Icons(i) = LoadIcon_(hModule, i + 101)
Next

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 50, 200, "")
  If CreateGadgetList(WindowID(0))
    For i = 0 To 3
      ImageGadget(i, 10, i * 40 + 10 , 32, 32, Icons(i))
    Next
  EndIf
EndIf

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend

CloseLibrary(0)

Nur zur Vervollstänigung :wink:

PS: ResourceHacker kann ich nur jedem empfehlen, der Resourcen nutzen möchte.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

ts-soft hat geschrieben: PS: ResourceHacker kann ich nur jedem empfehlen, der Resourcen nutzen möchte.
Es geht auch ohne ResourceHacker :wink:

Code: Alles auswählen

#RT_GROUP_ICON = 14
#WindowHeight = 100
#WindowWidth = 180

NewList ResNameList.L()


Procedure.l EnumResNameProc(ResHandle.L, ResType.L, ResName.L, AppParam.L)
  Shared ResNameList.S()

  AddElement(ResNameList())
  ResNameList() = ResName

  ProcedureReturn #True
EndProcedure


Procedure.L EnumResTypeProc(ResHandle.L, ResType.L, AppParam.L)
  If ResType = #RT_GROUP_ICON
    EnumResourceNames_(ResHandle, ResType, @EnumResNameProc(), 0)
  EndIf

  ProcedureReturn #True 
EndProcedure 


LibName.S = "User32.DLL"
LibHandle.L = LoadLibrary_(@LibName)

If LibHandle = 0
  MessageRequester("Fehler", "Die Windows-Bibliothek " + LibName + " konnte nicht geladen werden!", #MB_ICONERROR)
  End
EndIf

EnumResourceTypes_(LibHandle, @EnumResTypeProc(), 0) 

If OpenWindow(1, 0, 0, #WindowWidth, #WindowHeight, LibName, #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  If CreateGadgetList(WindowID(1))
    ListIconGadget(1, 5, 6, #WindowWidth - 12, #WindowHeight - 12, "", 60)
    ChangeListIconGadgetDisplay(1, 0)

    ForEach ResNameList()
      IconHandle = LoadIcon_(LibHandle, ResNameList())

      If IconHandle 
        AddGadgetItem(1, i + 1, "#" + StrU(ResNameList(), #Long), IconHandle)
        i = i + 1
      EndIf
    Next 
  EndIf 
EndIf 

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend 

FreeLibrary_(LibHandle)
Wenn man als LibName z.B. Shell32.DLL einträgt, kann man noch viel mehr Icons bewundern...

Im englischen Forum habe ich übrigens auch schon einmal ein Beispiel gezeigt, mit dem man alle in einer Datei (z.B. Exe, DLL) als Resource gespeicherten Cursor anschauen kann:
http://www.purebasic.fr/english/viewtop ... 3&start=35
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@Shardik
Schönes Beispiel :allright:
Vielleicht könntest Du sowas wie einen ResourceViewer für die PB-IDE oder
jaPBe schreiben?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten