MyGadget plattformübergreifend

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

MyGadget plattformübergreifend

Beitrag von Xaby »

ICONS:
http://www.folker-linstedt.de/pureforum/ICONS.zip

Bild

Hallo Fans,
da ich nie richtig verstanden habe, wie die CreateGadget() Lib funktioniert hat und die so weit ich das mitbekommen hatte, nur mit Windows läuft ...
hatte ich mir mal was überlegt ... wie ich eigene Gadgets erstellen kann und noch Zugriff auf deren Funktion habe, ohne es unnötig kompliziert bzw. komplex zu gestalten.

HINWEIS: Es ist nur ein Test, deshalb auch nicht bei Tipps und Tricks, sondern hier. Ich bin mir nämlich nicht sicher, ob ich eine ideale Lösung gefunden habe. Würde mich freuen, wenn jemand sich den Code mal anschauen kann und ihn so ändert, dass er das gleiche macht, aber die Lösung weit eleganter ist. Vielen Dank im Voraus.

Code: Alles auswählen

;/ Autor : Folker Linstedt
;  Anfang: 2008-06-18
;  Stand : 2008-06-18

EnableExplicit

Global PreferenceFile.s=GetHomeDirectory()+"FL_ZEIT.INI"

Procedure.s GetUserName()
; Methode nur auf Windows-Systemen
ProcedureReturn StringField(GetHomeDirectory(),3,"\")

EndProcedure



Global PfadDB.s="C:\F\PureBasic\Icons\Symbole\Lampen\"

Global XX, YY

Structure GType
  GN.l
  VGad.l
  Regel.l
EndStructure

Global NewList MyGad.GType()

Procedure AddMyGad(F,VGad=-1,Regel=0)
AddElement(MyGad())
  MyGad()\GN=F
  MyGad()\VGad=VGad ; Nachteil: Es kann ein Gadget nur ein anderes beeinflussen
  MyGad()\Regel=Regel
  ProcedureReturn F 
EndProcedure  

If OpenPreferences(PreferenceFile)
  XX=ReadPreferenceLong("X_POS", 100)
  YY=ReadPreferenceLong("Y_POS", 100)
  ClosePreferences()
EndIf

Procedure TimeGadegt(x,y,S$="Zeit:",I$="ICON",C=$FFE0F0)
Protected F, T, H=-30,K=-10, GG, SP

  
  F=AddMyGad(ContainerGadget(#PB_Any, x,y,150+K,50,#PB_Container_Flat))
  
  SetGadgetColor(F,#PB_Gadget_BackColor,C)
  AddMyGad(ImageGadget(#PB_Any,3,5,32,32,ImageID(LoadImage(#PB_Any,PfadDB+I$+".ICO"))))
  If S$="Zeit:"
  
  Else
    S$=S$+"zeit:"
  EndIf
  F=AddMyGad(TextGadget(#PB_Any,40,3,60,18,S$))
  SetGadgetColor(F,#PB_Gadget_BackColor,C)  
  
  F=AddMyGad(TextGadget(#PB_Any,70+H,23,20,18,"sec"))
  SetGadgetColor(F,#PB_Gadget_BackColor,C)
  
  F=AddMyGad(TextGadget(#PB_Any,117+K,3,40,18,"1:00"))
  SetGadgetColor(F,#PB_Gadget_BackColor,C)
  
  GG=F
  
  F=AddMyGad(SpinGadget(#PB_Any,90+H,22,50,23,0,3600,#PB_Spin_Numeric),GG,1) ; Einheit Minuten
  SetGadgetState(F,60)
  
  
  CloseGadgetList() 
EndProcedure  


Procedure GadHandling(GadgetNr)

 ForEach MyGad()
 If GadgetNr=MyGad()\GN
   If MyGad()\Regel ;/ Gibt ja nur eine Regel bis jetzt
     SetGadgetText(MyGad()\VGad, Str(GetGadgetState(MyGad()\GN)/60)+":"+RSet(Str(GetGadgetState(MyGad()\GN)%60),2,"0"))
     ;/ Regel könnte von GadgetType abhängig gemacht werden
   EndIf
 EndIf    
 Next
EndProcedure    


Procedure CreateGadgets()
Protected S$, i, J=5
  ;If ExamineDirectory(0,PfadDB+"Zeit\","*.ICO")
  If ExamineDirectory(0,PfadDB,"*.ICO")
  i=0
   While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
      S$=Left(DirectoryEntryName(0),Len(DirectoryEntryName(0))-Len(GetExtensionPart(DirectoryEntryName(0)))-1)
      ;Debug S$
      If S$<>"ICON"
      
         ; Diese Formel funktioniert nur, wegen der Rundung ;-)
         TimeGadegt(30+142*(i/J),10+52*(i-(i/J)*J),S$,S$,RGB(Random(55)+200,Random(100)+155,Random(25)+230))
         
         i+1
      EndIf   
      Else

      EndIf      
      
    Wend
    FinishDirectory(0)
  EndIf
  

  


EndProcedure


If OpenWindow(0,XX,YY,640,480,"FL-ZEIT - User: "+GetUserName(),#PB_Window_SystemMenu|#PB_Window_MinimizeGadget) And CreateGadgetList(WindowID(0))

CreateGadgets()


Define Event, GadgetNr, Quit=0, i

ForEach MyGad()
 ; Debug Str(MyGad()\GN)+"   "+Str(GadgetType(MyGad()\GN))
Next

Repeat
  Event=WaitWindowEvent(50)
  
  If Event=#PB_Event_Gadget
  
    GadgetNr=EventGadget()

      GadHandling(GadgetNr)    
          
  
  ElseIf Event=#PB_Event_CloseWindow
  
  Quit=1
  
  
EndIf


Until Quit



CreatePreferences(PreferenceFile)
  WritePreferenceLong("X_POS",WindowX(0))
  WritePreferenceLong("Y_POS",WindowY(0))

ClosePreferences()

CloseWindow(0)

EndIf
>>>> ZUM PFAD
Im QuellCode wird ein Pfad benutzt, dieser beinhaltet bei mir
ein paar Symbole mit folgenden Bezeichnungen:

Back.ICO
Wasch.ICO
Warte.ICO
Zyklus.ICO
Trocken.ICO
Kühl.ICO

... etc.

Die Icons sind 32 x 32
Der Name wird dann gleich zur Angabe der jeweiligen Zeit.

Aus Back.ICO wird Backzeit:

:allright:
Zuletzt geändert von Xaby am 19.06.2008 17:03, insgesamt 1-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

Kannst Du bitte die Iconen als Datasektion einbinden?
gruss
mardanny71
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Haste mal einen Tipp, wie ich die umwandeln muss, dass ich die als Text habe?

Ich kann mal den Ordner mit den ICONs als ZIP bereit stellen.

Dann muss man im Code nur noch den Ordner entsprechend anpassen.

:allright:
Kinder an die Macht http://scratch.mit.edu/
Antworten