Forum | | | | Dirk Kuntzmann | Hallo Profaner, gibt es in Profan die Möglichkeit den Kalender, wie er bei Dateedit aufklappt, sofort und ständig anzeigen zu lassen?
Frohe Weihnachten (gehabt zu haben) an alle
Gruß Dirk |
| | | | |
| | Rolf Koch | Hi meinste sowas? [web]https://xprofan.com/thread.core?t=5474&highlight=sysmonthcal32[/web] |
| | | | |
| | Dirk Kuntzmann | Hallo Rolf, wenn du etwas schickst wird es sicherlich funktionieren, ich hab leider kein Prefellow zur Hand, so dass der Test etwas dauern kann. Trotzdem vielen Dank erst einmal für die schnelle Antwort.
Gruß Dirk |
| | | | |
| | | Auch schon hier geschaut? [...] |
| | | | |
| | Rolf Koch | oder nochmal etwas, was ich grad zusammengestellt habe und einfacher ist: KompilierenMarkierenSeparierendeclare calender&,lesen&
declare dtp#
DEF getsystime(2) SendMessage(&(1),4097,0,&(2))
dim dtp#,20
PROC GETDATE
declare d$,m$,y$
parameters chdl&
getsystime(chdl&,dtp#)
d$=format$(00,word(dtp#,6))
m$=format$(00,word(dtp#,2))
y$=format$(0000,word(dtp#,0))
return d$+.+m$+.+y$
ENDPROC
cls
calender&=Control(SysMonthCal32,,$54000004,1,1,202,155,%hwnd,2000,%hinstance)
lesen&=Create(Button,%hwnd,Zeige,220,10,100,20)
while 1
waitinput
if getfocus(lesen&)
getdate calender&
messagebox($(0),Gewählt,0)
endif
wend
dispose dtp#
|
| | | | |
| | Dietmar Horn | Hallo Dirk,
Lade Dir einfach hier aus dem Wettbewerbsbereich unsere MMJ-Quellcodesammlung runter. Dort findest Du das von Rolf genannte Beispiel und im Unterordner System alle eventuell von den weit über 1000 Demoquellcodes benötigten Include- und sonstige Dateien, damit die Demos sofort lauffähig sind (die jeweils passende Profan²- bzw. XProfan-Version natürlich vorausgesetzt).
Wenn Du in der Suchfunktion der Quellcodesammlung den Begriff Kalender eingibst, dann findest Du weitere Beispiele dazu, die Du Dir selber anpassen kannst.
Marc-Gordon Kröhn hatte dieses Jahr mal eine komplette Terminverwaltung veröffentlicht (diese ist u.a. im XProfan-Manager enthalten: Kurse -> Demo-Programme):
Für das komplette Programm wird zwar die ListView.dll von Frank Abbing benötigt, aber der Kalenderteil funktioniert auch ohne diese DLL. Dort kannst Du Dir praktisch alles anpassen, was Dein Herz begehrt, denn der Code ist sehr gut dokumentiert. KompilierenMarkierenSeparieren(C) 2007 by Marc-Gordon Kröhn, http://www.marc-gordon.de
$P*
USERMESSAGES 16
Declare lvdll&,exit%,liste&,freelist&,text$,lvfont&,idx%,idx2%,Kalender&,X&,wochenende%,zeile1$,zeile2$
Declare AnzahlSpalten%,BreiteAnfang%,BreiteEnde%,ZeileY%,MerkeX%,MerkeY%,Kalender&,spalte$,ende$,styleset$,st%
Declare Kal_Innen&,Kal_NoAct&,Kal_Text&,Kal_Title&,Kal_TitleText&,Background&,Frage&,butmann&,butfrau&,frageexit%
Declare lvu%,neux%
Def GSC(1) !USER32,GetSysColor
Def GetWindowRect(2) !USER32, GetWindowRect
WindowStyle 16
Frage&=CreateDialog(%hwnd,Frage,((%maxX/2)-127),((%maxY/2)-45),255,91)
CreateText(Frage&,Sind Sie männlich oder weiblich?,5,5,242,20)
butmann&=CreateButton(Frage&,männlich,5,30,92,25)
butfrau&=CreateButton(Frage&,weiblich,150,30,92,25)
WhileNot frageexit%
GetMessage
if GetFocus(butmann&)
st%=1 Style 1
frageexit%=1
elseif GetFocus(butfrau&)
st%=2 Style 2
frageexit%=1
endif
Wend
DestroyWindow(Frage&)
##### EINSTELLUNGEN #####
wochenende%=1 Mit Wochenende=1 | Kein Wochenende=0
Case st%=1:Background&=rgb(209,246,255) Fensterhintergrund Style 1
Case st%=2:Background&=rgb(234,207,239) Fensterhintergrund Style 2
##### Grafiken & Style #####
Proc Style
Parameters getstyle%
Case getstyle%=1:styleset$=\set1 Style 1
Case getstyle%=2:styleset$=\set2 Style 2
spalte$=$ProgDir+styleset$+\Spalte.bmp
zeile1$=$ProgDir+styleset$+\zeile1.bmp
zeile2$=$ProgDir+styleset$+\zeile2.bmp
ende$=$ProgDir+styleset$+\endezeile.bmp
Farben für den Kalender
if getstyle%=1
Kal_Innen&=rgb(255,255,210) Innenfarbe
Kal_NoAct&=rgb(125,125,125) Farbe für nicht-aktuellen Monat
Kal_Text&=rgb(0,0,0) Textfarbe
Kal_Title&=rgb(71,118,179) Titelhintergrund
Kal_TitleText&=rgb(255,255,255) Titeltext
elseif getstyle%=2
Kal_Innen&=rgb(255,255,210)
Kal_NoAct&=rgb(125,125,125)
Kal_Text&=rgb(0,0,0)
Kal_Title&=rgb(154,17,108)
Kal_TitleText&=rgb(255,255,255)
endif
EndProc
Proc BMPXY
##### Automatische Grafikeinstellungen #####
##### Lade Garfiken und ermittel die Größe #####
MLoadBmp zeile1$
ZeileY%=%BmpY Höhe einer Zeile (Nicht Anfangszeile)
MLoadBmp spalte$
BreiteAnfang%=%BmpX Breite der ersten Grafik
MLoadBmp ende$
BreiteEnde%=%BmpX Breite der letzten Grafik
EndProc
##### ListView.dll einbinden
lvdll&=usedll($ProgDir+Listview.dll)
$I ListView_Funktionen.inc
Register(123456) Oder so ähnlich ;-)
lvfont&=Create(Font,Verdana,14,0,1,0,0)
##### ListView #####
Proc Liste
Declare wechsel%,Uhrzeit%,Uhrzeit$,text$
liste&=CreateListview(%hwnd,%hinstance,0,-1,-1,$400)
EnableEdits(liste&,1)
text$=011111
SelectColumnEdits(liste&,addr(text$))
InsertColumn liste&,,54,0
InsertColumn liste&,Montag,150,0
InsertColumn liste&,Dienstag,150,0
InsertColumn liste&,Mittwoch,150,0
InsertColumn liste&,Donnerstag,150,0
InsertColumn liste&,Freitag,150,0
Case Wochenende%=1:InsertColumn liste&,Samstag,150,0
Case Wochenende%=1:InsertColumn liste&,Sonntag,150,0
freelist&=SetLineHeight(liste&,ZeileY%-1)
DestroyImageList(freelist&)
wechsel%=2
Uhrzeit%=0
WhileLoop 48
if wechsel%=2
if Uhrzeit%<10
Uhrzeit$=0+Str$(Uhrzeit%)+:00
else
Uhrzeit$=Str$(Uhrzeit%)+:00
endif
SetItem liste&,Uhrzeit$,
wechsel%=1
else
SetItem liste&,,
Inc wechsel%
Inc Uhrzeit%
endif
EndWhile
SetFont liste&,lvfont&
ShowListview(liste&,10,10,width(%hwnd)-220,height(%hwnd)-50)
InitMessages(%hwnd)
AnzahlSpalten%=GetColumns(liste&)-1 Anzahl der normalen Zeilen ohne die Anfangszeile
EndProc
##### Erstellt die Hintergrundgrafik für das ListView mit Profan-Mitteln #####
Proc makegrf
Parameters Lang%
Declare zf&,StartZeichnenX%,StartZeichnenY%,multi%
StartZeichnenX%=0
StartZeichnenY%=0
multi%=1
windowStyle 80
zf&=Create(Window,%hwnd,,0,0,%maxX,ZeileY%*3)
#### Zeichnen
StartPaint zf&
LoadBmp spalte$,StartZeichnenX%,StartZeichnenY%;0
LoadSizedBmp zeile1$,BreiteAnfang%+StartZeichnenX%,StartZeichnenY%-Lang%,ZeileY%;0
LoadSizedBmp zeile2$,BreiteAnfang%+StartZeichnenX%,StartZeichnenY%+ZeileY%-Lang%,ZeileY%;0
WhileNot multi%=AnzahlSpalten%
loadbmp ende$,Lang%*multi%+BreiteAnfang%,StartZeichnenY%;0
LoadSizedBmp zeile1$,Lang%*multi%+BreiteAnfang%+BreiteEnde%,StartZeichnenY%-Lang%,ZeileY%;0
LoadSizedBmp zeile2$,Lang%*multi%+BreiteAnfang%+BreiteEnde%,StartZeichnenY%+ZeileY%-Lang%,ZeileY%;0
inc multi%
Wend
loadbmp ende$,Lang%*multi%+BreiteAnfang%,StartZeichnenY%;0
SaveBmp $TempDir+LVBACK.BMP,StartZeichnenX%,StartZeichnenY%-Lang%*multi%+BreiteAnfang%+25,ZeileY%*2 +20für evtl. Scrollbar
endPaint
DestroyWindow(zf&)
text$=$TempDir+lvback.bmp
SetBackImage(liste&,addr(text$),1)
endproc
Proc LVGroesse
Declare LangLV%,Spaltenbreite%,idx%
LangLV%=width(liste&)-5
Spaltenbreite%=(LangLV%-BreiteAnfang%)/AnzahlSpalten%
idx%=1
WhileNot idx%=AnzahlSpalten%+1
SetColumnWidth(liste&,idx%,Spaltenbreite%)
Inc idx%
Wend
makegrf Spaltenbreite%
EndProc
Proc Kal
Kalender&=Control(SysMonthCal32,,$54000004,width(liste&)+40,10,180,height(liste&),%hwnd,2000,%hinstance)
SetFont Kalender&,lvfont&
SendMessage(Kalender&,$100A,0,Background&)Hintergrund
SendMessage(Kalender&,$100A,4,Kal_Innen&)
SendMessage(Kalender&,$100A,5,Kal_NoAct&)
SendMessage(Kalender&,$100A,1,Kal_Text&)
SendMessage(Kalender&,$100A,2,Kal_Title&)
SendMessage(Kalender&,$100A,3,Kal_TitleText&)
Endproc
Proc SetOptimalSize
Parameters hmc&
Declare h&,w&,mrect#,am%,hoch%
Dim mrect#,16
SendMessage(hmc&,$1009,0,mrect#)
Let w&=Sub(Long(mrect#,8),Long(mrect#,0))
Let h&=Sub(Long(mrect#,12),Long(mrect#,4))
am%=height(%hwnd)/h&
hoch%=(am%*h&)
neux%=((Width(%hwnd)-10)-w&)
SetWindowPos Kalender&=neux%,10-w&,hoch%;0
Dispose mrect#
EndProc
##### Update ListView #####
lvu%=1
Proc Update
Case Width(%hwnd)<790:SetWindowPos %hwnd=%WinLeft,%WinTop-800,%WinBottom-%WinTop;0
Case Height(%hwnd)<570:SetWindowPos %hwnd=%WinLeft,%WinTop-%WinRight-%WinLeft,600;0
MerkeX%=Width(%hwnd)
MerkeY%=Height(%hwnd)
SetOptimalSize Kalender&
SetWindowPos liste&=10,10-neux%-20,height(%hwnd)-30;0 ***
LVGroesse
MerkeX%=Width(%hwnd)
MerkeY%=Height(%hwnd)
WindowTitle LV-Test - Anzahl LV-Updates:+Str$(lvu%)
Inc lvu%
EndProc
*** = Da wartet jemand sehnsüchtig auf seine XPrf10
um die Thread.pcu von iF zu benutzen :-)
##### Hauptfenster #####
Proc Hauptfenster
SetTrueColor 1
WindowStyle $003F
WindowTitle LV Test
Window ((%maxX/2)-512),((%maxY/2)-384)-1024,768
CLS Background&
UseFont Verdana,13,0,1,0,0
SetDialogFont 1
EndProc
##### Hauptprogramm #####
Hauptfenster
Case st%=1:Style 1
Case st%=2:Style 2
BMPXY
Liste
LVGroesse
Kal
Update
##### Hauptprogrammschleife #####
MerkeX%=Width(%hwnd)
MerkeY%=Height(%hwnd)
WhileNot exit%
GetMessage
Case %Umessage=16:exit%=1
CaseNot MerkeX%=Width(%hwnd):Update
CaseNot MerkeY%=Height(%hwnd):Update
Case Width(%hwnd)<790:Update
Case Height(%hwnd)<570:Update
Wend
DestroyWindow(liste&)
CloseMessages(%hwnd)
$I ListView_Dispose.inc
freedll lvdll&
Gruß Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 26.12.2007 ▲ |
| |
| | Dirk Kuntzmann | Hallo, vielen Dank für eure Mühe. Das kurze Beispiel von Rolf ist eigentlich alles, was ich z. Z. gesucht habe. Ich habe mir zwar mittlerweile auch wieder Prfellow installiert, aber Rolf kleines Programm mach ja eigentlich das Gleiche. Vielleicht wäre das ja etwas für eine neue Profan-Version, als Erweiterung der Date$-Funktion und wo dann das angeklickte Datum mit gettext$ gleich ausgelesen werden kann.
Gruß Dirk |
| | | | |
| | Michael Wodrich | Ab XProfan 8.0 ist dieser Wunsch erfüllt:
(das Beispiel aus der Hilfedatei) KompilierenMarkierenSeparierenDeclare hWin&, hButton&, Ende&, hDate&
hWin& = @Create(Dialog, %hWnd, Test, 100, 100, 200, 200)
hButton& = @Create(Button, hWin&, Ende, 10, 10, 180, 24)
hDate& = @Create(DateEdit, hWin&, , 10, 50, 100, 24)
Clear Ende&
WhileNot Ende&
WaitInput
If @GetFocus(hButton&)
Ende& = 1
EndIf
EndWhile
@MessageBox(@GetText$(hDate&), Datum, 0)
End
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 26.12.2007 ▲ |
| |
| | Dirk Kuntzmann | Hallo Michael, das ist ja das normale dateedit, wo der Kalender erst aufklappt, wenn der Button gedrückt wird. Der Wunsch ist ja, dass der Kalender immer angezeigt wird und ausgelesen werden kann, ohne dass erst ein Button betätigt werden muss. Siehe kurzes Beispiel von Rolf.
Gruß Dirk |
| | | | |
| | Michael Wodrich | Ja, da hab ich wohl geschlafen.... (steht ganz deutlich in Deinem ersten Posting).
Da müsste Roland dann ein Set(DateEdit, 0|1 ) bauen. Und bei der Gelegenheit auch die SetDate- und SetTime-Funktionen nachrüsten. Bisher geht das ja auch nur mit einem Trick.
Ach ja, und bei der Gelegenheit dann auch Set TimeFormat und SetDateFormat für die Formatstrings mit einbauen.
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 27.12.2007 ▲ |
| |
| | RGH | Michael Wodrich
Und bei der Gelegenheit auch die SetDate- und SetTime-Funktionen nachrüsten.
Ab der nächsten Version ist Befehl SetText entsprechend erweitert, so dass für die beiden Controls TimeEdit und DateEdit mit SetText die Zeit beziehungsweise das Datum eingestellt werden kann.
Gruß Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 27.12.2007 ▲ |
| |
|
AntwortenThemenoptionen | 3.633 Betrachtungen |
ThemeninformationenDieses Thema hat 6 Teilnehmer: |