Hallo,
seit 2 Tagen steh ich auf dem schlauch.
Ich möchte gern des Create("DateEdit"... mit der Listview.Dll benutzen.
Code
'*****************************************************************
'* Beispiel für die Funktion: GetControlParas(B#) *
'* Benötigt wird die Listview.Dll Ver.1.3 *
'* *
'* Autor: Normann Strübli *
'* *
'* Zeigt die Möglichkeit die Einträge eines Listview-Controls *
'* durch den Einsatz eigener Controls komfortabel zu Editieren *
'* *
'* In Spalte 1 u. 3 sind nur Zifferneingaben erlaubt. *
'* Feldsprung vorwärts: TAB *
'* Feldsprung rückwärts: STRG-TAB *
'*****************************************************************
$I ProfAlt.inc
Declare Listview&,Lvdll&,Mklick&,Element&
Declare LV_Handle&,LV_Column&,LV_Row&,LV_Xoffset&,LV_Yoffset&,LV_Width&,LV_Height&
Declare LV_Font&,LV_Orient&,LV_Text$,Edit_finish%,All_finish%,Eintrag%
declare HandlefromPoint&,mousepos#,HT_Info#,tab%
DIM MousePos#,10
DIM HT_Info#,16
Declare Font&
Declare Bereich#
Dim bereich#,320
Clear bereich#
DEF SetWindowPos(7) !"USER32","SetWindowPos"
DEF DeleteObject(1) !"GDI32","DeleteObject"
Def SetWindowLong(3) !"USER32", "SetWindowLongA"
Def GetWindowLong(2) !"USER32", "GetWindowLongA"
DEF GetKeyState(1) ! "USER32", "GetKeyState"
dEF ScreenToClient(2) !"USER32","ScreenToClient"
DEF Key(1) @equ(@and(getkeystate(&(1)),$8000),$8000)
DEF getcursorpos(1) !"USER32","GetCursorPos"
DEF mouseposx(0) long(mousepos#,0)
DEF mouseposy(0) long(mousepos#,4)
Def SetEditNumeric(1) SetWindowLong(@&(1),-16,\
Or(GetWindowLong(@&(1),-16),$2002))
$I Listview_Funktionen.inc
SETTRUECOLOR 1
Font& = @CREATE("FONT","NEW TIMES ROMAN",18,0,1,0,0)
Window 0,0-608,413
Windowtitle "Beispiel: GetControlParas(B#)"
lvdll&=usedll("Listview.dll")
listview&=CreateListView(%hwnd,%hinstance,0,Rgb(150,150,255),-1,$31)
SetFont listview&,Font&
InsertColumn listview&,"Menge",60,0
InsertColumn listview&,"Bezeichnung",120,1
InsertColumn listview&,"Art-Nr.",80,2
InsertColumn listview&,"Zustand",80,0
InsertColumn listview&,"Beschreibung",240,0
AutoSortListview listview&,2,1,2,1,1
SetItem listview&,"2","Telefon",112131,"Super","DECT, 300m Reichweite"
SetItem listview&,"1","Ecksofa",214144,"Toll","Ganz schön Eckig"
SetItem listview&,"1","Küchentisch",564366,"Mies","Eiche, Rund"
SetItem listview&,"2","Radio",196748,"Naja","Mit Suchlauf FM/MW"
SetItem listview&,"9","Bild",174864,"Geht so","Picasso Original"
SetItem listview&,"1","Doppelbett",296375,"Toll","210cm x 200cm Metall"
SetItem listview&,"1","Kerzenständer",949867,"Mies","Für mindesten 5 Kerzen"
SetItem listview&,"2","Deckenlampe",128676,"Super","Rund 2 x 60W"
SetItem listview&,"5","Laptop",565938,"Toll","Pentium 233 MMX"
SetItem listview&,"2","DVD-Player",106938,"Mies","Schwarz, defekt"
SetItem listview&,"12","Locher",483967,"Mies","Macht nur noch 1 Loch"
SetItem listview&,"5","Keyboard",699238,"Super","Kabellos, weiß"
SetItem listview&,"3","Modem",396736,"Naja","56K Extern"
SetItem listview&,"2","Faxgerät",157376,"Toll","T-Fax 3941"
SetItem listview&,"1","Klimagerät",196847,"Mies","Kompressor 2KW Kühlleistung"
SetItem listview&,"2","Mikrowelle",1857648,"Toll","25 Liter Garraum 800W"
SetItem listview&,"1","Kratzbaum",927638,"Toll","2,5m Hoch mit Kuschelecke"
SetItem listview&,"12","Seifenspender",159701,"Geht so","Restposten"
SetItem listview&,"6","Gartenstuhl",432456,"Super","Mit Sitzauflage"
SetItem listview&,"1","Leinwand",145878,"Mies","220x180cm mit Motor"
ShowListView(listview&,0,0,600,368)
InitMessages(%hwnd)
Proc Get_LvData
LV_Handle&=Long(bereich#,0) 'Listview Handle
LV_Column&=Long(bereich#,4) 'Index Spalte
LV_Row&=Long(bereich#,8) 'Index Zeile
LV_Xoffset&=Long(bereich#,12) 'X Offset
LV_Yoffset&=Long(bereich#,16) 'Y Offset
LV_Width&=Long(bereich#,20) 'Breite
LV_Height&=Long(bereich#,24) 'Höhe
LV_Font&=Long(bereich#,28) 'Font Handle
LV_Orient&=Long(bereich#,32) 'Textausrichtung
LV_Text$=String$(bereich#,64) 'Itemtext
LV_Height& = @SUB(LV_Height&,2) 'Kleine Größenkorrektur
if LV_Orient& = 1
LV_Orient& = 2
Elseif LV_Orient& = 2
LV_Orient& = 1
endif
if @gt(@add(LV_Xoffset&,LV_Width&),@Width(LV_Handle&)) 'Damit das Element nicht Außerhalb
LV_Width& = @sub(@Width(LV_Handle&),LV_Xoffset&) 'des Sichtbaren Bereiches der Spalte
endif 'erstellt wird
Endproc
Proc CursorPos
getcursorpos(mousepos#) 'Mausposition ermitteln
ScreenToClient(LV_Handle&,mousepos#) 'In Bildirmkoordinaten umrechen
Long Ht_info#,0=Long(mousepos#,0)
Long Ht_info#,4=Long(mousepos#,4)
Long Ht_info#,8=0
Long Ht_info#,12=0
Endproc
Proc EditLabel
Declare Ende%
Whilenot ende%
Edit_Finish% = 0
if @Instr(@Str$(LV_Column&),"0,1,2,4") 'Wenn Klick in Zeile 0,1,2,4 dann Edit Erstellen
Element&=control("Edit",LV_Text$,$548100C0 | LV_Orient&,LV_Xoffset&,LV_Yoffset&,LV_Width&,LV_Height&,LV_Handle&,100,%hinstance,0)
SetWindowPos(Element&,-1,0,0,0,0,$13) 'Edit den Style "Topmost" geben.
SetFont Element&,LV_Font&
Setfocus(Element&)
@SendString(Element&,"+({END})") 'Text Markieren und Cursor ans Ende
if @equ(LV_Column&,0) OR @equ(LV_Column&,2) 'Wenn erste oder Dritte Spalte...
SetEditNumeric(Element&) 'nur Ziffereingaben erlauben
Endif
Whilenot Edit_Finish%
ifnot @Key(9) 'Tab-Taste erst nach dem loslassen wieder "freigeben"
tab% = 0
endif
Getmessage
CursorPos
if @equ(SendMessage(LV_HAndle&,$1012,0,HT_Info#),-1) 'Überprüfen ob Maus sich über gültigen
Edit_Finish%=1 'Eintrag befindet sonst Editiern abbrechen
elseif @not(@Getfocus(Element&)) 'Falls Element Focus verliert > abbrechen
Edit_Finish% = 1
elseif @key(1) AND 'Falls Mausklick außerhalb vom Element > abbrechen
If @lt(mouseposx(0),LV_Xoffset&) OR @lt(mouseposy(0),LV_YOffset&) \
OR @gt(mouseposx(0),@add(LV_Xoffset&,LV_Width&)) OR @gt(mouseposy(0),@add(LV_Yoffset&,LV_Height&))
Edit_Finish%=1
endif
endif
If @key(13) 'Wenn im Edit Enter gedrückt
LV_Text$ = @GetText$(Element&) 'Eingabe übernehmen
SetItemText(LV_HAndle&,addr(LV_Text$),LV_Column&,LV_Row&)
Edit_Finish% = 1
Elseif @key(27) 'Wenn im Edit ESC gedrückt
Edit_Finish%=1
endif
if @key(9) AND @equ(Tab%,0) 'Wenn Tabulator gedrückt und TAB-Taste freigegeben
Edit_Finish% = 2
if @KEY(17) 'Falls zusätzlich STRG gedrückt...
Edit_Finish% = 3
endif
Tab% = 1
LV_Text$ = @GetText$(Element&) 'Eingabe übernehmen
SetItemText(LV_HAndle&,addr(LV_Text$),LV_Column&,LV_Row&)
endif
wend
Endif
if @Instr(@Str$(LV_Column&),"3") 'Wenn Doppelklick in Zeile 3 dann Combobox Erstellen
Element&= Create("DateEdit",LV_Handle&,"",LV_Xoffset&,LV_Yoffset&,LV_Width&,LV_Height&)
SetFont Element&,LV_Font&
@Setfocus(Element&)
Whilenot Edit_Finish% AND @GETFocus(Element&)
getmessage
ifnot @Key(9)
tab% = 0
endif
If @KEY(13) OR @KEY(1) 'Enter oder linker Mausklick
LV_Text$ = @GetText$(Element&) 'änderungen übernehmen
SetItemText(LV_HAndle&,addr(LV_Text$),LV_Column&,LV_Row&)
Edit_Finish% = 1
Elseif @key(9) AND @EQU(Tab%,0) 'Wenn Tabulator gedrückt und TAB-Taste freigegeben
Edit_Finish% = 2
if @KEY(17) 'wenn zusätzlich STRG gedrückt
Edit_Finish% = 3
endif
Tab% = 1
LV_Text$ = @GetText$(Element&) 'änderungen übernehmen
SetItemText(LV_HAndle&,addr(LV_Text$),LV_Column&,LV_Row&)
endif
wend
endif
@DestroyWindow(Element&) 'Edit zerstören
IF @Equ(edit_Finish%,1) 'Normal beenden...
@Setfocus(LV_Handle&)
ende% = 1
Endif
if @equ(edit_Finish%,2) 'Tab Taste gedrückt > nächstes Feld ermitteln
@Setfocus(%hwnd)
LV_Column& = @Add(LV_Column&,1)
if @equ(LV_Column&,GetColumns(LV_Handle&))
LV_Column& = 0
LV_Row& = @Add(LV_Row&,1)
if @equ(GetLines(LV_Handle&),LV_ROW&)
LV_ROW& = 0
endif
endif
Elseif @equ(edit_Finish%,3) 'Tab Taste und Strg gedrückt > voriges Feld ermitteln
@Setfocus(%hwnd)
LV_Column& = @sub(LV_Column&,1)
if @equ(LV_Column&,-1)
LV_Column& = @Sub(GetColumns(LV_Handle&),1)
LV_Row& = @Sub(LV_Row&,1)
if @equ(LV_ROW&,-1)
LV_ROW& = @SUB(GetLines(LV_Handle&),1)
endif
endif
endif
GetOwnControlParas(Bereich#,LV_Handle&,LV_Column&,LV_Row&)
Get_LvData
Wend
Endproc
' HAUPTPROGRAMM
While 1
waitinput
Case %key=2:BREAK
MKlick& = GetControlParas(Bereich#)'Feldparameter auslesen
If @equ(Mklick&,1) 'Doppelklick links
Get_LvData 'Parameter auslesen
EditLabel
endif
Wend
Dispose Bereich#
Dispose Mousepos#
Dispose HT_Info#
CloseMessages(%hwnd)
freedll lvdll&
$I Listview_Dispose.inc
DELETEOBJECT Font&
End
Alles anzeigen
Ich bekomm das mit der auswertung nicht hin.