Click through dia show

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.
Joebo2572
Beiträge: 9
Registriert: 01.11.2007 11:10
Wohnort: Schwelm

Click through dia show

Beitrag von Joebo2572 »

Hallo,

hier ein Beispiel eine click through dia Show. Für Kritik bin ich immer dankbar!!!!!

Code: Alles auswählen

UseJPEGImageDecoder() 

Global DelayTime.w
Global Pfad.s
Global Zufall.b
Global Breite.w
Global Hoehe.w
Global lastx.w
Global lasty.w
Global posx.w
Global posy.w
Global Zeit.c
Global Color.l

DelayTime = 1000

Image0 = CatchImage(0, ?Image0)
Image5 = CatchImage(5, ?Image5)


DataSection
Image0:IncludeBinary "slide.BMP"
Image5:IncludeBinary "2.ico"
EndDataSection

Count.c = 0

Procedure HideWindowFromShowingInTaskbar(WindowID, NewWindowHandle, show) 
  If show=1 
    HideWindow(WindowID,1) 
  EndIf 
  SetWindowLong_(WindowID(WindowID),#GWL_HWNDPARENT,NewWindowHandle) 
  If show=1 
    HideWindow(WindowID,0) 
  EndIf 
  ProcedureReturn 
EndProcedure 

Procedure size()
ffhwd = FindWindow_("Progman", "Program Manager")
  WindowRect.RECT ; WindowRect als RECT Struktur definieren  
  GetWindowRect_(ffhwd, WindowRect) ; Hier isse 
  Breite= WindowRect\right
  Hoehe =WindowRect\bottom
ExamineDesktops()
SHAppBarMessage_(#ABM_GETTASKBARPOS,Taskbar.APPBARDATA)
Select Taskbar\uEdge
Case #ABE_BOTTOM
  colpixx=DesktopWidth(0)-4
  colpixy=DesktopHeight(0)-4
Case #ABE_LEFT
  colpixx=4
  colpixy=DesktopHeight(0)-4
Case #ABE_TOP
  colpixx=DesktopWidth(0)-4
  colpixy=4
Case #ABE_RIGHT
  colpixx=DesktopWidth(0)-4
  colpixy=DesktopHeight(0)-4
EndSelect
hDC = GetDC_(0)
Color = GetPixel_(hDC,colpixx,colpixy)
ReleaseDC_(0, hDC)

EndProcedure

Procedure CheckTimer()
  Static Time.l
  If Time = 0
    Time = ElapsedMilliseconds() + DelayTime
    ProcedureReturn #True
  EndIf
  
  If Time < ElapsedMilliseconds()
    Time + DelayTime
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure SetWinTransparency(win,level) 
  If level>=0 And level<101 
hLib = LoadLibrary_("user32.dll") 
If hLib 
adr = GetProcAddress_(hLib,"SetLayeredWindowAttributes") 
If adr 
SetWindowLong_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000); Or #WS_EX_LAYERED|$00080000) 
SetLayeredWindowAttributes_(WindowID(win), RGB(255, 0, 255),255*level/100, $3)
EndIf 
FreeLibrary_(hLib) 
EndIf 
EndIf 
EndProcedure 

Procedure Darstellung()
LoadImage(40, GetGadgetItemText(20,Random(CountGadgetItems(20)-1),1))  
If ImageWidth(40)/Breite=>0.8 Or ImageHeight(40)/Hoehe=>0.8
If ImageWidth(40)=>ImageHeight(40)
fac.d= ImageHeight(40)/ImageWidth(40)
ResizeImage(40,hoehe*0.8,(hoehe*0.8)*fac)
Else
fac.d=ImageWidth(40)/ImageHeight(40)
ResizeImage(40,(hoehe*0.8)*fac,hoehe*0.8)
EndIf
EndIf
If Zufall=0
ResizeWindow(10, posx, posy, ImageWidth(40), ImageHeight(40)) 
Else
  posx=Random(Breite-200):posy=Random(Hoehe-200)
ResizeWindow(10, posx, posy, ImageWidth(40), ImageHeight(40)) 
EndIf
StartDrawing(WindowOutput(10)) 
DrawImage(ImageID(40), 0, 0) 
StopDrawing() 
ResizeWindow(20,posx+ImageWidth(40)-15,posy,#PB_Ignore,#PB_Ignore  ) 
EndProcedure

If ProgramParameter()=""
Pfad=PathRequester("Diashow","")
Zeit=Val(InputRequester("Diashow","Zeit in sec","20"))
Zufall=MessageRequester("Diashow","Zufällig positionieren",#PB_MessageRequester_YesNo)
If Zufall=6
  posx=10:posy=10
Else
  posx=Val(InputRequester("Diashow","X-Position","200"))
  posy=Val(InputRequester("Diashow","Y-Position","200"))
EndIf

If Pfad<>""
Speichern.s=InputRequester("Diashow","Zeile kopieren und in die Verknüpfung einfügen!",Pfad +" "+Str(Zeit)+" "+Str(Zufall)+" "+Str(posx)+" "+Str(posy))
EndIf

End
Else
  Pfad= ProgramParameter(0)
  Zeit= Val(ProgramParameter(1))
  Zufall= Val(ProgramParameter(2))
  posx= Val(ProgramParameter(3))
  posy= Val(ProgramParameter(4))
  
EndIf 

If OpenWindow(0, 0, 0, 20, 20,"Timer-Test", #PB_Window_SystemMenu)
ListViewGadget(20, 0, 0, 400, 500)
Size()

AddSysTrayIcon(2, WindowID(0), Image5)
SysTrayIconToolTip(2,"Simple Slideshow")  
HideWindow(0,1)
  
;Directory enlsesen  
If Right(Pfad,1)<>"\" :Pfad+"\":EndIf
If ExamineDirectory(directoryid,Pfad,"*.*")
dirid=NextDirectoryEntry(directoryid)
While dirid
dirtype = DirectoryEntryType(directoryid)
Select dirtype
Case #PB_DirectoryEntry_File
file.s=DirectoryEntryName(directoryid)
this_extension.s=LCase(GetExtensionPart(file))
this_filename.s=LCase(Left(file,Len(file)-Len(this_extension)))
If Len(this_extension):this_filename=Left(this_filename,Len(this_filename)-1):EndIf
If this_extension="jpg"
file.s=Pfad+DirectoryEntryName(directoryid)
AddGadgetItem(20,0,file)
EndIf
EndSelect
dirid=NextDirectoryEntry(directoryid)
Wend
EndIf
;Ende Directory

;Dia öffnen
OpenWindow(10,10,10,100,100,"",#PB_Window_BorderLess)  
HideWindowFromShowingInTaskbar(10, WindowID(0), 0)
ImageGadget(30, 0, 0, 30,30,image0)
SetWinTransparency(10,50)
;Button erstellen
OpenWindow(20,100,100,15,15,"",#PB_Window_BorderLess)
HideWindowFromShowingInTaskbar(20, WindowID(0), 0)
SetWindowColor(20,RGB(Red(Color),Green(Color),Blue(Color)))
Darstellung()
;Ende Diashow öffnen


Repeat
  
If lastx <> WindowMouseX(10) Or lasty <> WindowMouseY(10)
lastx=WindowMouseX(10)
lasty=WindowMouseY(10)
StartDrawing(WindowOutput(10)) 
DrawImage(ImageID(40), 0, 0) 
DrawImage(image0, lastx-15, lasty-15) 
StopDrawing()  
EndIf
  
      EventID = WindowEvent()
      Select EventID
        Case #PB_Event_CloseWindow
          Break
        Case 0
          Delay(200)
        Case #WM_LBUTTONDOWN
          SendMessage_(WindowID(20),#WM_NCLBUTTONDOWN,#HTCAPTION,0)
          ResizeWindow(10,WindowX(20)-ImageWidth(40)+15,WindowY(20),#PB_Ignore,#PB_Ignore) 
        EndSelect
      
If CheckTimer()
Count + 1
If Zeit=Count:FreeImage(40):Darstellung():Count=0:EndIf
EndIf
ForEver
EndIf
End
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Click through dia show

Beitrag von Kiffi »

Joebo2572 hat geschrieben:Für Kritik bin ich immer dankbar!!!!!
richtige Code-Einrückung für bessere Lesbarkeit wäre schon mal ein guter Anfang:
PureBasic-Editor hat geschrieben:<Ctrl> + a
<Ctrl> + i
:-)

Grüße ... Kiffi
a²+b²=mc²
Joebo2572
Beiträge: 9
Registriert: 01.11.2007 11:10
Wohnort: Schwelm

Re: Click through dia show

Beitrag von Joebo2572 »

Ja, bin halt ein Chaot... Deshalb hab ich natürlich vergessen das das Bild Image0 32x32 gross sein sollte und der Hintergrund den Farbcode 255,0,255 hat (dadurch ensteht die Transparenz)... War halt schon spät ;-)
Antworten