Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Deeem2031
Beiträge: 1232 Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:
Beitrag
von Deeem2031 » 16.08.2005 10:24
Hab mal wieder ein bischen in Purebasic rumgewühlt und dabei ist dieser (mehr oder weniger sinnvolle) Code bei rausgekommen:
Code: Alles auswählen
Structure GadgetFunctions
FreeGadget.l
GetGadgetState.l
SetGadgetState.l
GetGadgetText.l
SetGadgetText.l
AddGadgetItem.l
AddGadgetItem2.l
RemoveGadgetItem.l
ClearGadgetItemList.l
ResizeGadget.l
CountGadgetItems.l
GetGadgetItemState.l
SetGadgetItemState.l
GetGadgetItemText.l
SetGadgetItemText.l
OpenGadgetList2.l
GadgetX.l
GadgetY.l
GadgetWidth.l
GadgetHeight.l
HideGadget.l
EndStructure
Structure PB_GadgetStructure
Gadget.l ; OS Gadget pointer (HWND)
*VirtualTable.GadgetFunctions
CustomData.l ; Can be used to store extra infos on this gadget
CustomData2.l ; Can be used to store extra infos on this gadget
EndStructure
Procedure.l GetGadgetStructure(GadgetID)
GadgetID(GadgetID)
!MOV Eax, Edx
ProcedureReturn
EndProcedure
;{ MyTextSetGadgetText
Global *Gadget.PB_GadgetStructure, Text.s
Goto MyTextSetGadgetText_End
MyTextSetGadgetText:
!LEA Eax, dword[Esp+4]
!MOV dword[p_Gadget],Eax
!MOV Eax, dword[Esp+8]
!MOV dword[v_Text],Eax
SetWindowText_(*Gadget\Gadget,":P")
!RET 08
MyTextSetGadgetText_End:;}
CreateGadgetList(OpenWindow(0,0,0,200,200,#PB_Window_ScreenCentered|#PB_Window_SystemMenu,""))
TextGadget(0,90,90,20,20,"~")
*Gadget.PB_GadgetStructure = GetGadgetStructure(0)
Debug *Gadget\Gadget
Debug GadgetID(0)
*Gadget\VirtualTable\SetGadgetText = ?MyTextSetGadgetText
SetGadgetText(0,":)")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
NicTheQuick
Ein Admin
Beiträge: 8809 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 16.08.2005 12:18
Ich kapiers noch nicht so ganz.
Kannst du ein paar mehr Beispiele machen?
remi_meier
Beiträge: 1078 Registriert: 29.08.2004 20:11
Wohnort: Schweiz
Beitrag
von remi_meier » 16.08.2005 17:10
Er überschreibt sozusagen die PB-Funktionen mit eigenen (eigentlich nur
die Pointer).
Nette Idee
Deeem2031
Beiträge: 1232 Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:
Beitrag
von Deeem2031 » 16.08.2005 18:33
Genau, ich hab die SetGadgetText() Proc von dem TextGadget überschrieben. Dadurch steht dann da als text ":P" und nicht ":)"
Nur die eigenen procs zu schreiben ist gewöhnungsbedürftig, schreibt man das nämlich ein eine "echte" Procedure, dann stürzt das Programm ab, da der interne Aufruf nicht zu dem Eax/Stack-Aufruf der PB-Procs passt.
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]