![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
War schon mal da
![]() Registriert seit: 24.05.2009
Beiträge: 46
|
Hi,
ich brauche eine kleine Unterstützung. Ich möchte ein ListView ohne DLL erstellen (als Ausnahme, weil ich sonst Frank Abbings DLL sehr schätze!). Habe ein Beispiel von RiMa das sehr geeignet wäre. Den Teil mit Imagelist und Icons habe ich für diesen Test stillgelegt. Meine Problem ist: wenn ich eine Zeile im ListView anklicke möchte ich den Text der Spalte einlesen. Das heißt: ganz am Ende des Programms ist die While-Schleife. Code:
'ListView-Control mit Profan 6.0 32 Bit (P)FairWare, FreeWare
'
'(c) 1998 Richard Maurukas - verkürzte Form
'------------------------------------------------------------------------------
DEF GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
'Zum Laden der Icons wird Handle benötigt, aus der das Icon geladen werden soll.
DEF LoadIcon(2) ! "USER32","LoadIconA"
'Parameter 1: das Instance-Handle der Executable aus der zu ladenden Icons
'Parameter 2: ist ein Zeiger auf einen String, der den Namen des
' Icons enthält, oder ein Int Bezeichner der zum String
' (#) konvertiert wird.
'-------------------
DEF ImageList_Create(5) !"COMCTL32","ImageList_Create"
'Parameter 1: Breite der Images
'Parameter 2: Höhe der Images
'Parameter 3: Flag ILC_MASK=$0001 (zu jedem Bitmap wird eine
' schwarz/weiß-Maske verwendet)
'Parameter 4: 3 Images soll die Image-Liste aufnehmen (mehr
' "auf Vorrat" ist möglich - hier wird nur der
' Platz reserviert)
'Parameter 5: Represents the number of new images the resized
' image list can contain if the system needs to resize
' the list to make room for new images
'------------------
DEF ImageList_AddIcon(2) !"COMCTL32","ImageList_AddIcon"
'lt MS ImageList_AddIcon(2) 'nur zwei Parameter
'bei Bitmaps ImageList_Add(3) '"Comctl32","Imagelist_ADD" mit hbm_Mask
'Parameter 1: das Handle der Imagelist
'Parameter 2: das Handle des Icons (Bitmaps)
'Parameter 3: hbmMask (doch nur bei Bitmaps)
'-----------------
Def DestroyIcon(1) ! "USER32.DLL","DestroyIcon" ',"&","%"
'Parameter 1: ist das Handle des geladenen Icons
'-----------------
DEF ImageList_Destroy(1) !"COMCTL32","ImageList_Destroy"
'Parameter 1: Das Handle der mit Imagelist_Create erzeugten Imagelist
Def SetWindowlong(3) ! "USER32.DLL","SetWindowLongA" 'zum Ändern des Fensterstils
PROC LV32INIT 'Listview32 - Control mit gewünschten Stil erzeugen
case Lview&: destroywindow(Lview&) 'Falls schon was offen ist, weg damit.
'Oder Id und Lview& hochzählen und neues Fenster
'zur mehrfach Bearbeitung....LView&[1]-Lview&[15]
' IDNr. x+1 -IDNr. x+15
'Dementsprechende Fensterstile. .......
'Hier wird das Control erzeugt-------------------------------------------------------
'Der Aufruf: LV32INIT ,Windowtext$,Stil&, x%, Y%, DX%, DY%, Fenster%, ID%
'ws_Child, ws_visible, ws_Caption, $0200 LVS_EDITLABELS, $0001 LVS_REPORT
'Beim Sortiertstil werden die Subitems nicht richtig mitgenommen $0020 Ab, $0010 Aufsteigend
'Hier der variable Aufruf:
'Let LView&=@control("SysListView32",@$(1),@&(2),@%(3),@%(4),@%(5),@%(6),@%(7),@%(8),%Hinstance)
'Hier ein Control als Beispiel:
Let LView&=@control("SysListView32","Report-Ansicht",$50C00201,100,0,(%winright - 100),(%Winbottom - 100),%Hwnd,200,%Hinstance)
'-------------------------------------------------------------------------------------
'Bißchen Farbe Schadet nicht.....-----------------------------------------------------
sendmessage(LView&,$1001,0,$00BDFFFF) 'Hintergrund-Farbe ok |
sendmessage(LView&,$1024,0,$00FF0000) 'Text-Farbe ok |
sendmessage(Lview&,$1026,0,$FFFFFFFF) 'TextHintergrund-Farbe transparent? -1
'-------------------------------------------------------------------------------------
'Erweiteter Fensterstil für ListView32, Weitere im Menü-------------------------------
sendmessage(LView&,$1036,0,$00000023) 'Extendet Listviestyle
' $00000020 Fullrowselect (nur im Reportstil)
' $00000001 GRIDLINES
' $00000008 TRACKSELECT
' $00000002 SUBITEMIMAGES
' 'Beim Start des controls
'-------------------------------------------------------------------------------------
ENDPROC
PROC LVINSERTCOLUMN '--------------------HEADER-für ReportStil--------------------------
'Zu übergebene WERTE beim Aufruf von LVINSERTCOLUMN
'Beispiel: LVINSERTCOLUMN 0,$0021,140,"Datei-Name" 'String linksbündig Column 0
'@&(1) 'Nummer der Column. Erste immer 0
'@&(2) 'Ausrichtung Links Rechts oder Zentriert
'@&(3) 'Breite der Column
'@$(4) 'Text im Column-Header
string LVColumnText#,0 = @$(4) 'Der Übergebene Text in @$(4) ok
long LVCOLUMN#,0 = $000F 'MAsk,Text|Format|Width|Subitem ok
long LVCOLUMN#,4 = @&(2) 'Ausrichtung In @&(2) ok
long LVCOlumn#,8 = @&(3) 'Width of Column in Pixeln. In @&(3) ok
Long LVColumn#,12= LVColumnText# 'die Adresse aus LVColumntext# ok
sendmessage(Lview&,$101B,@&(1),LVColumn#) 'Insertcolumn. in @&(1) ok
ENDPROC '-------------------------------------------------------------------------
PROC LVINSERTTEXT '--------Item in Column einfügen und Text reinsetzen-------------
'Zu übergebende WERTE beim Aufruf von LVINSERTTEXT
'Beispiel: LVINSERTTEXT $0001,0,0,0,0,@FindFirst$("*.*"),80 'Werte in die Liste einfügen
String LVItemText#,0=@$(6) 'FeldText$
long LVITEM#,0 =@&(1) ' $0001 'MAsk z.B Text,$0002 Image
long LVITEm#,4 =@&(2) ' e% 'index of the item (zeile)
long LVItem#,8 =@&(3) ' e1% 'index of the subitem (column)
long LvItem#,12=@&(4) ' 0 'item state
long LVItem#,16=@&(5) ' 0 'state Mask of item
long LVITEM#,20=LVitemtext# 'item text Adresse
long Lvitem#,24=@&(7) '%dbFlen 'size of text buffer
long Lvitem#,28=@&(8) 'IconNr. aus Imagelist
sendmessage(Lview&,$1007,@&(3),LVItem#) ' e1% 'Insertitem to column
sendmessage(Lview&,$102E,@&(2),Lvitem#) ' e% 'Settext into Item
ENDPROC '--------------------------------------------------------------------------------
Proc Insert_Zeile
Parameters Line%,Text1$,Text2$,Ico_Nr%
Declare Colum%
LVINSERTTEXT $0002,Line%,0,0,0,,,Ico_Nr%
CaseNot (Text1$ = "") : LVINSERTTEXT $0001,Line%,1,0,0,Text1$
CaseNot (Text2$ = "") : LVINSERTTEXT $0001,Line%,2,0,0,Text2$
Return
EndProc
'ENDE LISTView INC-----------------------------------------------------------------------
Declare hImageList&,hIcon&,Executehandle&,Lview& 'hImagelist1&
Declare Iconname#
Declare Zeile$,Ret&
declare LVItemtext# 'Der Text im Item
declare LVItem# 'Die Item-Adresse
declare LVColumnTEXT# 'Der Column -Headertext
declare LVColumn# 'Die Column Adresse
' ==============
' Programm Start
' ==============
WindowStyle 4 +8 +16 '512 '84 + 8
Window 0,0-600,300
Windowtitle "Listview-Control mit Imagelist, (c) Richard Maurukas"
Dim Iconname#,25
dim LVItemText#,255 'Der Text im Item
dim LVItem#,34 'Max Adresse von LVItem
dim LVColumnTEXT#,255 'Max Text im LV-Header
dim LVcolumn#,30 'Max Adresse von LV_Column
'Let hImagelist&=ImageList_Create(32,32,$0001,3,3) 'Imagelist erzeugen
'Hicon& = create("hIcon", "pdf.ico", 0)
'ImageList_AddIcon(hImagelist&,HIcon&)
'Hicon& = create("hIcon", "Ordner.ico", 0)
'ImageList_AddIcon(hImagelist&,HIcon&)
'DestroyIcon(Hicon&)
LV32INIT
'sendmessage(Lview&,$1003,1,hImagelist&) 'Imagelist in die ListView
LVINSERTCOLUMN 0,$0021,50," "
LVINSERTCOLUMN 1,$0020,400,"Bilderverzeichnis / Doku"
LVINSERTCOLUMN 2,$0020,40,"Dok"
Insert_Zeile 0,"1. Zeile",,1
Insert_Zeile 1,"2. Zeile",,0
Insert_Zeile 2,"3. Zeile","PDA",0
While 1
waitinput
' HIER ist mein Problem. Wie werte ich aus: den Text der angeklickten Zeile
' zu lesen ?
Case %key=2:BREAK
If GetFocus(LView&)
' es gelingt auch nicht dere Versuch aus der 1. Zeile / 2. Spalte den Text nach Zeile$ zu lesen
long LVItem#,4 = 0 ' 1. Zeile
long LVItem#,8 = 1 ' 2. Spalte
Ret& = SendMessage(Lview&,$102D,0,LVItem#) ' LVM_GETITEMTEXT
Zeile$ = @String$(LvItemText#,0)
Messagebox(Zeile$,@Str$(Ret&),0)
EndIf
Wend
End
'ListView-Control mit Profan 6.0 32 Bit (P)FairWare, FreeWare
'
'(c) 1998 Richard Maurukas - verkürzte Form
'------------------------------------------------------------------------------
DEF GetModuleHandle(1) !"KERNEL32","GetModuleHandleA"
'Zum Laden der Icons wird Handle benötigt, aus der das Icon geladen werden soll.
DEF LoadIcon(2) ! "USER32","LoadIconA"
'Parameter 1: das Instance-Handle der Executable aus der zu ladenden Icons
'Parameter 2: ist ein Zeiger auf einen String, der den Namen des
' Icons enthält, oder ein Int Bezeichner der zum String
' (#) konvertiert wird.
'-------------------
DEF ImageList_Create(5) !"COMCTL32","ImageList_Create"
'Parameter 1: Breite der Images
'Parameter 2: Höhe der Images
'Parameter 3: Flag ILC_MASK=$0001 (zu jedem Bitmap wird eine
' schwarz/weiß-Maske verwendet)
'Parameter 4: 3 Images soll die Image-Liste aufnehmen (mehr
' "auf Vorrat" ist möglich - hier wird nur der
' Platz reserviert)
'Parameter 5: Represents the number of new images the resized
' image list can contain if the system needs to resize
' the list to make room for new images
'------------------
DEF ImageList_AddIcon(2) !"COMCTL32","ImageList_AddIcon"
'lt MS ImageList_AddIcon(2) 'nur zwei Parameter
'bei Bitmaps ImageList_Add(3) '"Comctl32","Imagelist_ADD" mit hbm_Mask
'Parameter 1: das Handle der Imagelist
'Parameter 2: das Handle des Icons (Bitmaps)
'Parameter 3: hbmMask (doch nur bei Bitmaps)
'-----------------
Def DestroyIcon(1) ! "USER32.DLL","DestroyIcon" ',"&","%"
'Parameter 1: ist das Handle des geladenen Icons
'-----------------
DEF ImageList_Destroy(1) !"COMCTL32","ImageList_Destroy"
'Parameter 1: Das Handle der mit Imagelist_Create erzeugten Imagelist
Def SetWindowlong(3) ! "USER32.DLL","SetWindowLongA" 'zum Ändern des Fensterstils
PROC LV32INIT 'Listview32 - Control mit gewünschten Stil erzeugen
case Lview&: destroywindow(Lview&) 'Falls schon was offen ist, weg damit.
'Oder Id und Lview& hochzählen und neues Fenster
'zur mehrfach Bearbeitung....LView&[1]-Lview&[15]
' IDNr. x+1 -IDNr. x+15
'Dementsprechende Fensterstile. .......
'Hier wird das Control erzeugt-------------------------------------------------------
'Der Aufruf: LV32INIT ,Windowtext$,Stil&, x%, Y%, DX%, DY%, Fenster%, ID%
'ws_Child, ws_visible, ws_Caption, $0200 LVS_EDITLABELS, $0001 LVS_REPORT
'Beim Sortiertstil werden die Subitems nicht richtig mitgenommen $0020 Ab, $0010 Aufsteigend
'Hier der variable Aufruf:
'Let LView&=@control("SysListView32",@$(1),@&(2),@%(3),@%(4),@%(5),@%(6),@%(7),@%(8),%Hinstance)
'Hier ein Control als Beispiel:
Let LView&=@control("SysListView32","Report-Ansicht",$50C00201,100,0,(%winright - 100),(%Winbottom - 100),%Hwnd,200,%Hinstance)
'-------------------------------------------------------------------------------------
'Bißchen Farbe Schadet nicht.....-----------------------------------------------------
sendmessage(LView&,$1001,0,$00BDFFFF) 'Hintergrund-Farbe ok |
sendmessage(LView&,$1024,0,$00FF0000) 'Text-Farbe ok |
sendmessage(Lview&,$1026,0,$FFFFFFFF) 'TextHintergrund-Farbe transparent? -1
'-------------------------------------------------------------------------------------
'Erweiteter Fensterstil für ListView32, Weitere im Menü-------------------------------
sendmessage(LView&,$1036,0,$00000023) 'Extendet Listviestyle
' $00000020 Fullrowselect (nur im Reportstil)
' $00000001 GRIDLINES
' $00000008 TRACKSELECT
' $00000002 SUBITEMIMAGES
' 'Beim Start des controls
'-------------------------------------------------------------------------------------
ENDPROC
PROC LVINSERTCOLUMN '--------------------HEADER-für ReportStil--------------------------
'Zu übergebene WERTE beim Aufruf von LVINSERTCOLUMN
'Beispiel: LVINSERTCOLUMN 0,$0021,140,"Datei-Name" 'String linksbündig Column 0
'@&(1) 'Nummer der Column. Erste immer 0
'@&(2) 'Ausrichtung Links Rechts oder Zentriert
'@&(3) 'Breite der Column
'@$(4) 'Text im Column-Header
string LVColumnText#,0 = @$(4) 'Der Übergebene Text in @$(4) ok
long LVCOLUMN#,0 = $000F 'MAsk,Text|Format|Width|Subitem ok
long LVCOLUMN#,4 = @&(2) 'Ausrichtung In @&(2) ok
long LVCOlumn#,8 = @&(3) 'Width of Column in Pixeln. In @&(3) ok
Long LVColumn#,12= LVColumnText# 'die Adresse aus LVColumntext# ok
sendmessage(Lview&,$101B,@&(1),LVColumn#) 'Insertcolumn. in @&(1) ok
ENDPROC '-------------------------------------------------------------------------
PROC LVINSERTTEXT '--------Item in Column einfügen und Text reinsetzen-------------
'Zu übergebende WERTE beim Aufruf von LVINSERTTEXT
'Beispiel: LVINSERTTEXT $0001,0,0,0,0,@FindFirst$("*.*"),80 'Werte in die Liste einfügen
String LVItemText#,0=@$(6) 'FeldText$
long LVITEM#,0 =@&(1) ' $0001 'MAsk z.B Text,$0002 Image
long LVITEm#,4 =@&(2) ' e% 'index of the item (zeile)
long LVItem#,8 =@&(3) ' e1% 'index of the subitem (column)
long LvItem#,12=@&(4) ' 0 'item state
long LVItem#,16=@&(5) ' 0 'state Mask of item
long LVITEM#,20=LVitemtext# 'item text Adresse
long Lvitem#,24=@&(7) '%dbFlen 'size of text buffer
long Lvitem#,28=@&(8) 'IconNr. aus Imagelist
sendmessage(Lview&,$1007,@&(3),LVItem#) ' e1% 'Insertitem to column
sendmessage(Lview&,$102E,@&(2),Lvitem#) ' e% 'Settext into Item
ENDPROC '--------------------------------------------------------------------------------
Proc Insert_Zeile
Parameters Line%,Text1$,Text2$,Ico_Nr%
Declare Colum%
LVINSERTTEXT $0002,Line%,0,0,0,,,Ico_Nr%
CaseNot (Text1$ = "") : LVINSERTTEXT $0001,Line%,1,0,0,Text1$
CaseNot (Text2$ = "") : LVINSERTTEXT $0001,Line%,2,0,0,Text2$
Return
EndProc
'ENDE LISTView INC-----------------------------------------------------------------------
Declare hImageList&,hIcon&,Executehandle&,Lview& 'hImagelist1&
Declare Iconname#
Declare Zeile$,Ret&
declare LVItemtext# 'Der Text im Item
declare LVItem# 'Die Item-Adresse
declare LVColumnTEXT# 'Der Column -Headertext
declare LVColumn# 'Die Column Adresse
' ==============
' Programm Start
' ==============
WindowStyle 4 +8 +16 '512 '84 + 8
Window 0,0-600,300
Windowtitle "Listview-Control mit Imagelist, (c) Richard Maurukas"
Dim Iconname#,25
dim LVItemText#,255 'Der Text im Item
dim LVItem#,34 'Max Adresse von LVItem
dim LVColumnTEXT#,255 'Max Text im LV-Header
dim LVcolumn#,30 'Max Adresse von LV_Column
'Let hImagelist&=ImageList_Create(32,32,$0001,3,3) 'Imagelist erzeugen
'Hicon& = create("hIcon", "pdf.ico", 0)
'ImageList_AddIcon(hImagelist&,HIcon&)
'Hicon& = create("hIcon", "Ordner.ico", 0)
'ImageList_AddIcon(hImagelist&,HIcon&)
'DestroyIcon(Hicon&)
LV32INIT
'sendmessage(Lview&,$1003,1,hImagelist&) 'Imagelist in die ListView
LVINSERTCOLUMN 0,$0021,50," "
LVINSERTCOLUMN 1,$0020,400,"Bilderverzeichnis / Doku"
LVINSERTCOLUMN 2,$0020,40,"Dok"
Insert_Zeile 0,"1. Zeile",,1
Insert_Zeile 1,"2. Zeile",,0
Insert_Zeile 2,"3. Zeile","PDA",0
While 1
waitinput
' HIER ist mein Problem. Wie werte ich aus: den Text der angeklickten Zeile
' zu lesen ?
Case %key=2:BREAK
If GetFocus(LView&)
' hier komme ich noch herein beim Anklicken einer Zeile. Aber wie komme ich zum Text?
Messagebox("eine Zeile wurde angeklickt","",0)
EndIf
Wend
End
Gerhard. XProfan11 und Windows 7. |
|
|
|
|
|
|
#2 (Direktlink) | |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
@Gerhard
So kann man auch mit kleinen Sachen manchen Menschen Freude machen ! So geht es ! Zitat:
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#3 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Geht sogar noch einfacher mit GetText$() statt GetString$().
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#4 (Direktlink) | |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
...und so geht es mit einer Datei:
Zitat:
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Mit Datei ist unschön...
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
|
#6 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
Ist genau wie Angela Merkel:
Die ist auch nicht schön, aber funktioniert ! - Ne wohr ?
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
#7 (Direktlink) |
|
War schon mal da
![]() Registriert seit: 24.05.2009
Beiträge: 46
|
Horst, Danke. Ich bin begeistert.
Gruß Gerhard. |
|
|
|
|
|
#8 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.878
|
Freut mich, daß ich helfen konnte.
Hatte schon vor einiger Zeit mit dem Code von Richard Marukas gearbeitet. Nachdem aber X-Profan die Gridbox hat, ist die, wenn nicht alles bunt sein soll, vorzuziehen. (einfacher zu erstellen Soll das Listview mit allen Möglichkeiten erstellt werden, dann natürlich die DLL von Frank (mittlerweile Freeware)
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| ListView DLL & WindowStyle 512 | Hovy | Dlls, Includes, Units & Prozeduren | 5 | 18.04.2010 11:37 |
| Listview.dll und Richtungstasten | horsthorn | Dlls, Includes, Units & Prozeduren | 2 | 01.02.2010 13:46 |
| listview | Peter C. | Spezielles | 6 | 29.03.2009 00:41 |
| Listview | Peter C. | Helfer & Tools | 3 | 28.03.2009 09:30 |
| Listview.dll & Odbc2Lv.prf | kelte | Dlls, Includes, Units & Prozeduren | 2 | 26.03.2009 19:20 |