KalenderImage
> Ja da der Code zuerst nur für mich war habe ich keinen Grund gehabt ihn
> zu Formatieren
... da Du Dich nun jedoch entschieden hast, Deinen Code der Allgemeinheit
zur Verfügung zu stellen, solltest Du dem Motto des Forums "Code, Tipps und
Tricks" gerecht werden, ihn auch "beispielhaft" formatieren.
[au weia, das gibt wieder Haue]
> zu Formatieren
... da Du Dich nun jedoch entschieden hast, Deinen Code der Allgemeinheit
zur Verfügung zu stellen, solltest Du dem Motto des Forums "Code, Tipps und
Tricks" gerecht werden, ihn auch "beispielhaft" formatieren.
[au weia, das gibt wieder Haue]
a²+b²=mc²
- 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
Bitte, bitte, aber mein Tip wird wohl nicht funzen, da ich nicht feststellen
konnte, wo Deine eigentliche If abfrage endet. Da ich im Moment die PB-IDE
verwende, kann ich also kein Feedback geben, weil mehr als starten geht ja
nicht.
Unformatierten Code werde ich mir unter Code, Tipps und Tricks wohl auch
nicht mehr umbedingt ansehen, es sei den ich verwende gerade jaPBe.
konnte, wo Deine eigentliche If abfrage endet. Da ich im Moment die PB-IDE
verwende, kann ich also kein Feedback geben, weil mehr als starten geht ja
nicht.
Unformatierten Code werde ich mir unter Code, Tipps und Tricks wohl auch
nicht mehr umbedingt ansehen, es sei den ich verwende gerade jaPBe.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- 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
Ohne Zeileneinrückungen kann man dem Source doch nicht folgen. Ist doch einfach nur Spagetthi. Und Kommentare, wenn erforderlich, sollten auch nicht
fehlen
Kanns nicht mehr sehen 
fehlen
Code: Alles auswählen
;PureBasic 4.0 Beta6
z=0
d=0
Enumeration
#window
#kalendergadget
#Kalimg
EndEnumeration
Procedure IsLeapyear(j)
Protected d.l
If ((j % 4) = 0 And (j % 100)) <> 0 Or (j % 400) = 0
d = 1
EndIf
ProcedureReturn d
EndProcedure
Procedure GetNumOfDaysPerMonth(m, j)
Protected d.l
d = 30 + (m + m / 8) % 2 - 2 * ((m + 10) / 12 - (m + 9) / 12)
If m = 2
If IsLeapyear(j)
d + 1
EndIf
EndIf
ProcedureReturn d
EndProcedure
Procedure CalenderImagegadget(Calenderid,CalenderFont.s,Jahr,Monat)
textfont1 = LoadFont(#PB_Any,CalenderFont, 12)
textid1=FontID(textfont1)
Dim months.l(12)
For a=1 To 12
months(a)= GetNumOfDaysPerMonth(a,Jahr)
Next a
Dim month_text.s(12)
month_text.s(1)="Januar"
month_text.s(2)="Februar"
month_text.s(3)="März"
month_text.s(4)="April"
month_text.s(5)="Mai"
month_text.s(6)="Juni"
month_text.s(7)="Juli"
month_text.s(8)="August"
month_text.s(9)="September"
month_text.s(10)="Oktober"
month_text.s(11)="November"
month_text.s(12)="Dezember"
wochentage.s="Mo Di Mi Do Fr Sa So"
Debug result
For a=1 To 12
Debug month_text(a)
;-kalenderimage
Next a
Dayplace= DayOfWeek(Date(Jahr,Monat,1,0,0,0))
If Dayplace=0
Dayplace=7
EndIf
;-
If CreateImage(Calenderid,150,160,24)
If StartDrawing(ImageOutput(Calenderid))
DrawingFont(textid1)
DrawingMode(1)
FrontColor(RGB(255,255,255))
Box(0,0,150,20,RGB(51,102,153))
DrawText((150/2)-(TextWidth(month_text(Monat))/2),0,month_text(Monat))
Box(0,20,150,20,RGB(172,193,210))
DrawText((150/2)-(TextWidth(wochentage)/2),20,wochentage)
Box(0,40,150,120,RGB(255,255,255))
FrontColor(RGB(0,0,0))
For a=4 To 150 Step 21
Line(a,40,0,160)
Next a
For a=40 To 160 Step 20
Line(0,a,150,0)
Next a
For c=40 To 160 Step 20
For b=5 To 150 Step 21.5
d=d+1
If z<months(Monat) And d>Dayplace-1
z=z+1
DrawText(b,c,Str(z))
EndIf
Next b
Next c
StopDrawing()
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
;Beispiel -----------------------------------------
Calender=CalenderImagegadget(#Kalimg,"Times",2006,4)
;-
If OpenWindow(#window,0,0,300,200,"lolo")
If CreateGadgetList(WindowID(#window))
ImageGadget(#kalendergadget,0,0,150,70,ImageID(#Kalimg))
EndIf
EndIf
Repeat
event=WaitWindowEvent()
windowid=EventWindow()
gadgetid=EventGadget()
EventType=EventType()
Until event=#PB_Event_CloseWindow
End
;---------------------------------

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

So habe es Versucht noch mit ein Paar Komentaren aufzuarbeiten:
Code: Alles auswählen
;PureBasic 4.0 Beta6
z=0
d=0
Enumeration
#window
#kalendergadget
#Kalimg
EndEnumeration
;---Diese Procedure ermittelt ob das angebene Jahr(j) ein Schaltjahr ist
Procedure IsLeapyear(j)
Protected d.l
If ((j % 4) = 0 And (j % 100)) <> 0 Or (j % 400) = 0
d = 1
EndIf
ProcedureReturn d
EndProcedure
;----------------------------------------------------------------------
;---Diese Procedure ermittelt die Anzahl der Tage des Monats(m) im angegebenen Jahr(j)
Procedure GetNumOfDaysPerMonth(m, j)
Protected d.l
d = 30 + (m + m / 8) % 2 - 2 * ((m + 10) / 12 - (m + 9) / 12)
If m = 2
If IsLeapyear(j)
d + 1
EndIf
EndIf
ProcedureReturn d
EndProcedure
;------------------------------------------------------------------------
;---Diese Procedure erzeugt ein Image(Calenderid) auf dem mit dem angegebenen Font(CalenderFont)
;---ein Kalenderblatt welches den Monat des angegebenen Jahres anzeigt
Procedure CalenderImagegadget(Calenderid,CalenderFont.s,Jahr,Monat)
textfont1 = LoadFont(#PB_Any,CalenderFont, 12)
textid1=FontID(textfont1)
Dim months.l(12)
;Kalendertage für alle 12 Monate abfragen,eigentlich nicht nötig für den eingebenen Monat würde reichen
For a=1 To 12
months(a)= GetNumOfDaysPerMonth(a,Jahr)
Next a
;--------------------------------------------------------------------------------
Dim month_text.s(12)
month_text.s(1)="Januar"
month_text.s(2)="Februar"
month_text.s(3)="März"
month_text.s(4)="April"
month_text.s(5)="Mai"
month_text.s(6)="Juni"
month_text.s(7)="Juli"
month_text.s(8)="August"
month_text.s(9)="September"
month_text.s(10)="Oktober"
month_text.s(11)="November"
month_text.s(12)="Dezember"
wochentage.s="Mo Di Mi Do Fr Sa So"
For a=1 To 12
Next a
Dayplace= DayOfWeek(Date(Jahr,Monat,1,0,0,0))
If Dayplace=0
Dayplace=7
EndIf
Calenderid=CreateImage(#PB_Any,150,160,24)
If Calenderid
If StartDrawing(ImageOutput(Calenderid))
DrawingFont(textid1)
DrawingMode(1)
FrontColor(RGB(255,255,255))
Box(0,0,150,20,RGB(51,102,153))
DrawText((150/2)-(TextWidth(month_text(Monat))/2),0,month_text(Monat))
Box(0,20,150,20,RGB(172,193,210))
DrawText((150/2)-(TextWidth(wochentage)/2),20,wochentage)
Box(0,40,150,120,RGB(255,255,255))
FrontColor(RGB(0,0,0))
;Kästchen Zeichnen
For a=4 To 150 Step 21
Line(a,40,0,160)
Next a
For a=40 To 160 Step 20
Line(0,a,150,0)
Next a
;------------------------
;Kalendertage auf das Image zeichnen
For c=40 To 160 Step 20
For b=5 To 150 Step 21.5
d=d+1
If z<months(Monat) And d>Dayplace-1
z=z+1
DrawText(b,c,Str(z))
EndIf
Next b
Next c
;-------------------------------------
StopDrawing()
ProcedureReturn Calenderid
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
;-----------------------------------------------------------
;-----------------------------------------------------------
;Beispiel -----------------------------------------
Calender=CalenderImagegadget(#Kalimg,"Times",2006,4);Kalenderblatt für April erzeugen
;-
If OpenWindow(#window,0,0,300,200,"lolo")
If CreateGadgetList(WindowID(#window))
ImageGadget(#kalendergadget,0,0,150,70,ImageID(Calender));Kalenderblat auf einem Imagegadget ausgeben
EndIf
EndIf
Repeat
event=WaitWindowEvent()
windowid=EventWindow()
gadgetid=EventGadget()
EventType=EventType()
Until event=#PB_Event_CloseWindow
End
;---------------------------------
Purebasic 5.0 32bit und 64 bit
I'm back from hell
I'm back from hell
- 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
Und jetzt nochmal mit #PB_Any Unterstützung
Für #PB_Any einfach die 2 Kommentare einen tiefer legen

Code: Alles auswählen
;PureBasic 4.0 Beta6
z=0
d=0
Enumeration
#window
#kalendergadget
#Kalimg
EndEnumeration
;---Diese Procedure ermittelt ob das angebene Jahr(j) ein Schaltjahr ist
Procedure IsLeapyear(j)
Protected d.l
If ((j % 4) = 0 And (j % 100)) <> 0 Or (j % 400) = 0
d = 1
EndIf
ProcedureReturn d
EndProcedure
;----------------------------------------------------------------------
;---Diese Procedure ermittelt die Anzahl der Tage des Monats(m) im angegebenen Jahr(j)
Procedure GetNumOfDaysPerMonth(m, j)
Protected d.l
d = 30 + (m + m / 8) % 2 - 2 * ((m + 10) / 12 - (m + 9) / 12)
If m = 2
If IsLeapyear(j)
d + 1
EndIf
EndIf
ProcedureReturn d
EndProcedure
;------------------------------------------------------------------------
;---Diese Procedure erzeugt ein Image(Calenderid) auf dem mit dem angegebenen Font(CalenderFont)
;---ein Kalenderblatt welches den Monat des angegebenen Jahres anzeigt
Procedure CalenderImagegadget(Calenderid,CalenderFont.s,Jahr,Monat)
textfont1 = LoadFont(#PB_Any,CalenderFont, 12)
textid1=FontID(textfont1)
Dim months.l(12)
;Kalendertage für alle 12 Monate abfragen,eigentlich nicht nötig für den eingebenen Monat würde reichen
For a=1 To 12
months(a)= GetNumOfDaysPerMonth(a,Jahr)
Next a
;--------------------------------------------------------------------------------
Dim month_text.s(12)
month_text.s(1)="Januar"
month_text.s(2)="Februar"
month_text.s(3)="März"
month_text.s(4)="April"
month_text.s(5)="Mai"
month_text.s(6)="Juni"
month_text.s(7)="Juli"
month_text.s(8)="August"
month_text.s(9)="September"
month_text.s(10)="Oktober"
month_text.s(11)="November"
month_text.s(12)="Dezember"
wochentage.s="Mo Di Mi Do Fr Sa So"
For a=1 To 12
Next a
Dayplace= DayOfWeek(Date(Jahr,Monat,1,0,0,0))
If Dayplace=0
Dayplace=7
EndIf
If Calenderid = #PB_Any
Calenderid=CreateImage(#PB_Any,150,160,24)
Else
CreateImage(Calenderid,150,160,24)
EndIf
If Calenderid
If StartDrawing(ImageOutput(Calenderid))
DrawingFont(textid1)
DrawingMode(1)
FrontColor(RGB(255,255,255))
Box(0,0,150,20,RGB(51,102,153))
DrawText((150/2)-(TextWidth(month_text(Monat))/2),0,month_text(Monat))
Box(0,20,150,20,RGB(172,193,210))
DrawText((150/2)-(TextWidth(wochentage)/2),20,wochentage)
Box(0,40,150,120,RGB(255,255,255))
FrontColor(RGB(0,0,0))
;Kästchen Zeichnen
For a=4 To 150 Step 21
Line(a,40,0,160)
Next a
For a=40 To 160 Step 20
Line(0,a,150,0)
Next a
;------------------------
;Kalendertage auf das Image zeichnen
For c=40 To 160 Step 20
For b=5 To 150 Step 21.5
d=d+1
If z<months(Monat) And d>Dayplace-1
z=z+1
DrawText(b,c,Str(z))
EndIf
Next b
Next c
;-------------------------------------
StopDrawing()
ProcedureReturn Calenderid
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
;-----------------------------------------------------------
;-----------------------------------------------------------
;Beispiel -----------------------------------------
;Calender=CalenderImagegadget(#PB_Any,"Times",2006,4);Kalenderblatt für April erzeugen
CalenderImagegadget(#Kalimg,"Times",2006,4);Kalenderblatt für April erzeugen
;-
If OpenWindow(#window,0,0,300,200,"lolo")
If CreateGadgetList(WindowID(#window))
;ImageGadget(#kalendergadget,0,0,150,70,ImageID(Calender));Kalenderblat auf einem Imagegadget ausgeben
ImageGadget(#kalendergadget,0,0,150,70,ImageID(#Kalimg));Kalenderblat auf einem Imagegadget ausgeben
EndIf
EndIf
Repeat
event=WaitWindowEvent()
windowid=EventWindow()
gadgetid=EventGadget()
EventType=EventType()
Until event=#PB_Event_CloseWindow
End
;---------------------------------
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 72
- Registriert: 16.03.2006 11:20
Also, der Aufwand für ordnungsgemäßes Einrücken sollte nicht so ein Problem sein, ich habe da auch ein kleines Tool geschrieben, das sehr vorzügliche Dienste leistet (es berücksichtigt auch eure private Neigungen, da es aus der IDE Konfiguration ausliest, ob ihr Tabulatoren oder Leerzeichen zum Einrücken verwendetKiffi hat geschrieben:> Ja da der Code zuerst nur für mich war habe ich keinen Grund gehabt ihn
> zu Formatieren
... da Du Dich nun jedoch entschieden hast, Deinen Code der Allgemeinheit
zur Verfügung zu stellen, solltest Du dem Motto des Forums "Code, Tipps und
Tricks" gerecht werden, ihn auch "beispielhaft" formatieren.

http://www.purebasic.fr/english/viewtop ... autoindent