Foro | | | | Jörg Sellmeyer | ¡Hola,
In diesem schönen Code de Uwe Pascal Niemeyer se una Treeview producido.
Leider gelingt lo No una Rechtsklick en una Item auszuwerten. Der Foco hüpft siempre inmediatamente zurück en el vorher gewählten Eintrag. Mit una simulierten Mausklick (Gracias IF) restos zwar el Foco aber sólo una Haga doble clic en con Rechts liest el Item de. ¿Cómo se puede uno also con un einfachen Rechtsklick el Informationen auslesen. KompilierenMarcaSeparación $H Windows.ph
$H messages.ph
$H CommCtrl.ph
window 50,50-600,400
usefont MS Sans Serif,15,7,0,0,0
setdialogfont 1
usermessages 16-------Fenster schließen abfangen
numwidth 6
strwidth 10
declare IcoList&,Tv&,Tv#
declare a&,b&,c&,d&
-----------------------------------------------------------------------------------ImageList
def ImageList_Create(5) !COMCTL32,ImageList_Create
def ImageList_AddIcon(2) !COMCTL32,ImageList_AddIcon
def ImageList_Destroy(1) !COMCTL32,ImageList_Destroy
def LoadIcon(2) !USER32,LoadIconA
IcoList&=ImageList_Create(16,16,1,1,0)---Parameter 1+2: Grösse der Icons
ImageList_AddIcon(IcoList&,LoadIcon(0,32512))---SystemIcons laden
ImageList_AddIcon(IcoList&,LoadIcon(0,32513))
ImageList_AddIcon(IcoList&,LoadIcon(0,32514))
ImageList_AddIcon(IcoList&,LoadIcon(0,32515))
----------------------------------------------------------------------------------Funktionen
def TvGetSelect(1) sendmessage(&(1),4362,9,0)-------TVM_GETNEXTITEM , TVIS_SELECTED
def TvInsertItem(1) sendmessage(&(1),4352,0,Tv#)----TVM_INSERTITEM
def TvGetItem(1) sendmessage(&(1),4364,0,Tv#+8)-----TVM_GETITEM
struct TV=Parent&,InsertAfter&,Mask&,Item&,State&,StateMask&,Text&,TextMax&,Ico1&,Ico2&,Children&,Data&,Text$(100)
dim Tv#,TV
clear Tv#
Tv#.Text& = Tv#+48
Tv#.TextMax&= 100
Tv&=control(SysTreeView32,,$5000002f,0,0,0,0,%hwnd,200,%Hinstance,$200)
sendmessage(Tv&,4361,0,IcoList&)---TVM_SETIMAGELIST
Tv#.Mask& =1+2+4+32---TVIF_IMAGE + TVIF_PARAM + TVIF_SELECTEDIMAGE + TVIF_TEXT
Tv#.Ico1& =0
Tv#.Ico2& =1
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$ =Eintrag 1
Tv#.Data& =1111
a&=TvInsertItem(Tv&)
Tv#.Parent&=a&---------unter Eintrag 1 einordnen
Tv#.Text$=Eintrag 2
Tv#.Data& =3333
b&=TvInsertItem(Tv&)
Tv#.Parent&=b&---------unter Eintrag 2 einordnen
Tv#.Text$=Eintrag 3
Tv#.Data& =4444
TvInsertItem(Tv&)
Tv#.Ico1& =3
Tv#.Ico2& =2
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$=Eintrag 4
Tv#.Data& =123
TvInsertItem(Tv&)
Tv#.Text$=Eintrag 5
Tv#.Data& =234
b&=TvInsertItem(Tv&)
Tv#.Text$=Eintrag 7
Tv#.Data& =345
TvInsertItem(Tv&)
Tv#.InsertAfter&=b&----------oberste Ebene, aber unterhalb von Eintrag 5
Tv#.Text$=Eintrag 6
Tv#.Data& =456
TvInsertItem(Tv&)
setwindowpos Tv&=250,10-300,300---Neuzeichnen wg. Baumstruktur
while 1
waitinput
case %umessage=16:break------------------Fenster schließen
locate 0,0
If GetFocus(TV&) AND (%childmessage = ~WM_LBUTTONDOWN)
Tv#.Item&=TvGetSelect(Tv&)
TvGetItem(Tv&)
print Tv#.Parent& :,Tv#.Parent&
print Tv#.Item& :,Tv#.Item&
print Linksklick Tv#.Text$ :,Tv#.Text$
print Tv#.Ico1& :,Tv#.Ico1&
print Tv#.Ico2& :,Tv#.Ico2&
print Tv#.Data& :,Tv#.Data&
ElseIf GetFocus(TV&) AND (%childmessage = ~WM_RBUTTONDOWN)
Mit MouseEvent bleibt zwar der Focus auf dem Item aber erst mit rechtem
Doppelklick füllt sich die Struktur
~Mouse_Event(~MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
~Mouse_Event(~MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
Tv#.Item&=TvGetSelect(Tv&)
TvGetItem(Tv&)
Print Rechtklick Tv#.Item$ :,Tv#.Text$
EndIf
endwhile
destroywindow(Tv&)
case IcoList&:ImageList_Destroy(IcoList&=s2>)
disponer Tv#
Saludo Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.10.2006 ▲ |
| |
| | | Probier veces: KompilierenMarcaSeparación $H Windows.ph
$H Messages.ph
$H Commctrl.ph
Window 50,50-600,400
Usefont MS Sans Serif,15,7,0,0,0
Setdialogfont 1
Usermessages 16-------Fenster schließen abfangen
Numwidth 6
Strwidth 10
Declare Icolist&,Tv&,Tv#
Declare A&,B&,C&,D&
-----------------------------------------------------------------------------------ImageList
Def Imagelist_create(5) !COMCTL32,ImageList_Create
Def Imagelist_addicon(2) !COMCTL32,ImageList_AddIcon
Def Imagelist_destroy(1) !COMCTL32,ImageList_Destroy
Def Loadicon(2) !USER32,LoadIconA
Icolist&=Imagelist_create(16,16,1,1,0)---Parameter 1+2: Grösse der Icons
Imagelist_addicon(Icolist&,Loadicon(0,32512))---SystemIcons laden
Imagelist_addicon(Icolist&,Loadicon(0,32513))
Imagelist_addicon(Icolist&,Loadicon(0,32514))
Imagelist_addicon(Icolist&,Loadicon(0,32515))
----------------------------------------------------------------------------------Funktionen
Def Tvgetselect(1) Sendmessage(&(1),4362,9,0)-------TVM_GETNEXTITEM , TVIS_SELECTED
Def Tvinsertitem(1) Sendmessage(&(1),4352,0,Tv#)----TVM_INSERTITEM
Def Tvgetitem(1) Sendmessage(&(1),4364,0,Tv#+8)-----TVM_GETITEM
Struct Tv=Parent&,Insertafter&,Mask&,Item&,State&,Statemask&,Text&,Textmax&,Ico1&,Ico2&,Children&,Data&,Text$(100)
Dim Tv#,Tv
Clear Tv#
Tv#.Text& = Tv#+48
Tv#.Textmax&= 100
Tv&=Control(SysTreeView32,,$5000002F,0,0,0,0,%Hwnd,200,%Hinstance,$200)
Sendmessage(Tv&,4361,0,Icolist&)---TVM_SETIMAGELIST
Tv#.Mask& =1+2+4+32---TVIF_IMAGE + TVIF_PARAM + TVIF_SELECTEDIMAGE + TVIF_TEXT
Tv#.Ico1& =0
Tv#.Ico2& =1
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$ =Eintrag 1
Tv#.Data& =1111
A&=Tvinsertitem(Tv&)
Tv#.Parent&=A&---------unter Eintrag 1 einordnen
Tv#.Text$=Eintrag 2
Tv#.Data& =3333
B&=Tvinsertitem(Tv&)
Tv#.Parent&=B&---------unter Eintrag 2 einordnen
Tv#.Text$=Eintrag 3
Tv#.Data& =4444
Tvinsertitem(Tv&)
Tv#.Ico1& =3
Tv#.Ico2& =2
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$=Eintrag 4
Tv#.Data& =123
Tvinsertitem(Tv&)
Tv#.Text$=Eintrag 5
Tv#.Data& =234
B&=Tvinsertitem(Tv&)
Tv#.Text$=Eintrag 7
Tv#.Data& =345
Tvinsertitem(Tv&)
Tv#.Insertafter&=B&----------oberste Ebene, aber unterhalb von Eintrag 5
Tv#.Text$=Eintrag 6
Tv#.Data& =456
Tvinsertitem(Tv&)
Setwindowpos Tv&=250,10-300,300---Neuzeichnen wg. Baumstruktur
While 1
Waitinput
Case %Umessage=16:Break------------------Fenster schließen
Locate 0,0
If Getfocus(Tv&) And (%Childmessage = ~Wm_lbuttondown)
Tv#.Item&=Tvgetselect(Tv&)
Tvgetitem(Tv&)
print Tv#.Parent& :,Tv#.Parent&
print Tv#.Item& :,Tv#.Item&
Print Linksklick Tv#.Text$ :,Tv#.Text$
print Tv#.Ico1& :,Tv#.Ico1&
print Tv#.Ico2& :,Tv#.Ico2&
print Tv#.Data& :,Tv#.Data&
Elseif Getfocus(Tv&) And (%Childmessage = ~Wm_rbuttondown)
Mit MouseEvent bleibt zwar der Focus auf dem Item aber erst mit rechtem
Doppelklick füllt sich die Struktur
~Mouse_event(~Mouseeventf_leftdown, 0, 0, 0, 0)
~Mouse_event(~Mouseeventf_leftup, 0, 0, 0, 0)
dulcoiF
Tv#.Item&=Tvgetselect(Tv&)
Tvgetitem(Tv&)
Print Rechtklick Tv#.Item$ :,Tv#.Text$
Endif
Endwhile
Destroywindow(Tv&)
Case Icolist&:Imagelist_destroy(Icolist&)
Dispose Tv#
proc dulcoiF
settimer 1;waitinput;killtimer
ENDPROC
|
| | | | |
| | Jörg Sellmeyer | Funktioniert desafortunadamente auch no El Auswertung es wohl encima NM_TREEVIEW. Dann se una NMHDR-Struktur gefüllt y el sagt una entonces, si con Rechts geklickt wurde. Dazu se entonces aber ni TV_HITTESTINFO -Struktur y el Message TVM_HITTEST versendet.
Leider raucht me de estos ganzen Estructuras con entsprechenden Masken u.s.w. siempre el el Kopf. So bastante blick Yo como todavía no por.
In una Power Basic-Foro Yo veces esta Code gefunden: KompilierenMarcaSeparación So como yo verstehe, simulado él auch una Mausklick con Links aber entonces eben esta HitTest-Geschichte... Yo veces o ne- Textdatei con mehr PB-Code angehängt. Como muß Yo mich todavía mühsam durcharbeiten, como Yo außer Profano no Programmierkenntnisse habe. Tal vez kann lo alguien leichter qué erkennen.
Saludo Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.10.2006 ▲ |
| |
| | | Hm en me funktioniert mein Ejemplo bajo XPHome. |
| | | | |
| | Jörg Sellmeyer | Es sí n Ding... En me funktioniert lo siempre sólo después de el zweiten Clic con Rechts (XP Professional) |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.10.2006 ▲ |
| |
| | | Und así? KompilierenMarcaSeparación $H Windows.ph
$H Messages.ph
$H Commctrl.ph
Window 50,50-600,400
Usefont MS Sans Serif,15,7,0,0,0
Setdialogfont 1
Usermessages 16-------Fenster schließen abfangen
Numwidth 6
Strwidth 10
Declare Icolist&,Tv&,Tv#
Declare A&,B&,C&,D&
-----------------------------------------------------------------------------------ImageList
Def Imagelist_create(5) !COMCTL32,ImageList_Create
Def Imagelist_addicon(2) !COMCTL32,ImageList_AddIcon
Def Imagelist_destroy(1) !COMCTL32,ImageList_Destroy
Def Loadicon(2) !USER32,LoadIconA
Icolist&=Imagelist_create(16,16,1,1,0)---Parameter 1+2: Grösse der Icons
Imagelist_addicon(Icolist&,Loadicon(0,32512))---SystemIcons laden
Imagelist_addicon(Icolist&,Loadicon(0,32513))
Imagelist_addicon(Icolist&,Loadicon(0,32514))
Imagelist_addicon(Icolist&,Loadicon(0,32515))
----------------------------------------------------------------------------------Funktionen
Def Tvgetselect(1) Sendmessage(&(1),4362,9,0)-------TVM_GETNEXTITEM , TVIS_SELECTED
Def Tvinsertitem(1) Sendmessage(&(1),4352,0,Tv#)----TVM_INSERTITEM
Def Tvgetitem(1) Sendmessage(&(1),4364,0,Tv#+8)-----TVM_GETITEM
Struct Tv=Parent&,Insertafter&,Mask&,Item&,State&,Statemask&,Text&,Textmax&,Ico1&,Ico2&,Children&,Data&,Text$(100)
Dim Tv#,Tv
Clear Tv#
Tv#.Text& = Tv#+48
Tv#.Textmax&= 100
Tv&=Control(SysTreeView32,,$5000002F,0,0,0,0,%Hwnd,200,%Hinstance,$200)
Sendmessage(Tv&,4361,0,Icolist&)---TVM_SETIMAGELIST
Tv#.Mask& =1+2+4+32---TVIF_IMAGE + TVIF_PARAM + TVIF_SELECTEDIMAGE + TVIF_TEXT
Tv#.Ico1& =0
Tv#.Ico2& =1
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$ =Eintrag 1
Tv#.Data& =1111
A&=Tvinsertitem(Tv&)
Tv#.Parent&=A&---------unter Eintrag 1 einordnen
Tv#.Text$=Eintrag 2
Tv#.Data& =3333
B&=Tvinsertitem(Tv&)
Tv#.Parent&=B&---------unter Eintrag 2 einordnen
Tv#.Text$=Eintrag 3
Tv#.Data& =4444
Tvinsertitem(Tv&)
Tv#.Ico1& =3
Tv#.Ico2& =2
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$=Eintrag 4
Tv#.Data& =123
Tvinsertitem(Tv&)
Tv#.Text$=Eintrag 5
Tv#.Data& =234
B&=Tvinsertitem(Tv&)
Tv#.Text$=Eintrag 7
Tv#.Data& =345
Tvinsertitem(Tv&)
Tv#.Insertafter&=B&----------oberste Ebene, aber unterhalb von Eintrag 5
Tv#.Text$=Eintrag 6
Tv#.Data& =456
Tvinsertitem(Tv&)
Setwindowpos Tv&=250,10-300,300---Neuzeichnen wg. Baumstruktur
While 1
Waitinput
Case %Umessage=16:Break------------------Fenster schließen
Locate 0,0
If Getfocus(Tv&) And (%Childmessage = ~Wm_lbuttondown)
Tv#.Item&=Tvgetselect(Tv&)
Tvgetitem(Tv&)
print Tv#.Parent& :,Tv#.Parent&
print Tv#.Item& :,Tv#.Item&
Print Linksklick Tv#.Text$ :,Tv#.Text$
print Tv#.Ico1& :,Tv#.Ico1&
print Tv#.Ico2& :,Tv#.Ico2&
print Tv#.Data& :,Tv#.Data&
endif
if Getfocus(Tv&) And (%Childmessage = ~Wm_rbuttondown)
Mit MouseEvent bleibt zwar der Focus auf dem Item aber erst mit rechtem
Doppelklick füllt sich die Struktur
~Mouse_event(~Mouseeventf_leftdown, 0, 0, 0, 0)
~Mouse_event(~Mouseeventf_leftup, 0, 0, 0, 0)
getmessage
Tv#.Item&=Tvgetselect(Tv&)
Tvgetitem(Tv&)
Print Rechtklick Tv#.Item$ :,Tv#.Text$
Endif
Endwhile
Destroywindow(Tv&)
Case Icolist&:Imagelist_destroy(Icolist&ass=s2>)
Disponer Tv#
|
| | | | |
| | | Apéndice: Bitte como Prc oder Exe testen. |
| | | | |
| | Jörg Sellmeyer | Funktioniert auch sólo de el 2. Clic - y luego el Editcontrol aktiviert. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.10.2006 ▲ |
| |
| | | Yo denke veces, el entspricht auch no deinen Vorstellungen, oder? KompilierenMarcaSeparaciónDef @GetCursorPos(1) !USER32,GetCursorPos
Def @ScreenToClient(2) !USER32,ScreenToClient
$H Windows.ph
$H Messages.ph
$H Commctrl.ph
Window 50,50-600,400
Usefont MS Sans Serif,15,7,0,0,0
Setdialogfont 1
Usermessages 16-------Fenster schließen abfangen
Numwidth 6
Strwidth 10
Declare Icolist&,Tv&,Tv#
Declare A&,B&,C&,D&
-----------------------------------------------------------------------------------ImageList
Def Imagelist_create(5) !COMCTL32,ImageList_Create
Def Imagelist_addicon(2) !COMCTL32,ImageList_AddIcon
Def Imagelist_destroy(1) !COMCTL32,ImageList_Destroy
Def Loadicon(2) !USER32,LoadIconA
Icolist&=Imagelist_create(16,16,1,1,0)---Parameter 1+2: Grösse der Icons
Imagelist_addicon(Icolist&,Loadicon(0,32512))---SystemIcons laden
Imagelist_addicon(Icolist&,Loadicon(0,32513))
Imagelist_addicon(Icolist&,Loadicon(0,32514))
Imagelist_addicon(Icolist&,Loadicon(0,32515))
----------------------------------------------------------------------------------Funktionen
Def Tvgetselect(1) Sendmessage(&(1),4362,9,0)-------TVM_GETNEXTITEM , TVIS_SELECTED
Def Tvinsertitem(1) Sendmessage(&(1),4352,0,Tv#)----TVM_INSERTITEM
Def Tvgetitem(1) Sendmessage(&(1),4364,0,Tv#+8)-----TVM_GETITEM
Struct Tv=Parent&,Insertafter&,Mask&,Item&,State&,Statemask&,Text&,Textmax&,Ico1&,Ico2&,Children&,Data&,Text$(100)
Dim Tv#,Tv
Clear Tv#
Tv#.Text& = Tv#+48
Tv#.Textmax&= 100
Tv&=Control(SysTreeView32,,$5000002F,0,0,0,0,%Hwnd,200,%Hinstance,$200)
Sendmessage(Tv&,4361,0,Icolist&)---TVM_SETIMAGELIST
Tv#.Mask& =1+2+4+32---TVIF_IMAGE + TVIF_PARAM + TVIF_SELECTEDIMAGE + TVIF_TEXT
Tv#.Ico1& =0
Tv#.Ico2& =1
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$ =Eintrag 1
Tv#.Data& =1111
A&=Tvinsertitem(Tv&)
Tv#.Parent&=A&---------unter Eintrag 1 einordnen
Tv#.Text$=Eintrag 2
Tv#.Data& =3333
B&=Tvinsertitem(Tv&)
Tv#.Parent&=B&---------unter Eintrag 2 einordnen
Tv#.Text$=Eintrag 3
Tv#.Data& =4444
Tvinsertitem(Tv&)
Tv#.Ico1& =3
Tv#.Ico2& =2
Tv#.Parent&=0----------oberste Ebene
Tv#.Text$=Eintrag 4
Tv#.Data& =123
Tvinsertitem(Tv&)
Tv#.Text$=Eintrag 5
Tv#.Data& =234
B&=Tvinsertitem(Tv&)
Tv#.Text$=Eintrag 7
Tv#.Data& =345
Tvinsertitem(Tv&)
Tv#.Insertafter&=B&----------oberste Ebene, aber unterhalb von Eintrag 5
Tv#.Text$=Eintrag 6
Tv#.Data& =456
Tvinsertitem(Tv&)
Setwindowpos Tv&=250,10-300,300---Neuzeichnen wg. Baumstruktur
While 1
Waitinput
Case %Umessage=16:Break------------------Fenster schließen
Locate 0,0
If Getfocus(Tv&) And (%Childmessage = ~Wm_lbuttondown)
Tv#.Item&=Tvgetselect(Tv&)
Tvgetitem(Tv&)
print Tv#.Parent& :,Tv#.Parent&
print Tv#.Item& :,Tv#.Item&
Print Linksklick Tv#.Text$ :,Tv#.Text$
print Tv#.Ico1& :,Tv#.Ico1&
print Tv#.Ico2& :,Tv#.Ico2&
print Tv#.Data& :,Tv#.Data&
Elseif Getfocus(Tv&) And (%Childmessage = ~Wm_rbuttondown)
Mit MouseEvent bleibt zwar der Focus auf dem Item aber erst mit rechtem
Doppelklick füllt sich die Struktur
DIM H_TEST#,16
Clear H_TEST#
@GetCursorPos(H_TEST#)
@ScreenToClient(TV&,H_TEST#)
@Sendmessage(TV&,$1111,0,H_TEST#)
@Sendmessage(TV&,$110B,$9,@long(H_TEST#,12))
Dispose H_Test#
Tv#.Item&=Tvgetselect(Tv&)
Tvgetitem(Tv&)
Print Rechtklick Tv#.Item$ :,Tv#.Text$
Endif
Endwhile
Destroywindow(Tv&)
Case Icolist&:Imagelist_destroy(Icolis n class=s2>)
Disponer Tv#
Hatte desafortunadamente no lauffähigen Texto de dir y voluntad hoffen, el lo klappt.
Saludo
Andreas |
| | | | |
| | Jörg Sellmeyer | Super Andreas! Gracias, el ha me muy weitergeholfen. Usted hast Así que el Screenkoordinaten ratón via Hittest-Message a el TV gesandt. Das war genau el, Yo gesucht habe aber como dijo: en Estructuras verstehe Yo oft sólo Bahnhof.
Hier otra vez el Bedeutungen el Messages:
SendMessage(Tv&,$1111,0,H_test#)~TVM_HitTest SendMessage(Tv&,$110B,$9,@Largo(H_test#,12))~TVM_SELECTITEM
A. Hötker
Hatte desafortunadamente no lauffähigen Texto de dir y voluntad hoffen, el lo klappt.
Was meint él así bloß? Was es porque el, Yo mitgeschickt habe? Daß el Code de me es, Yo sí nada behauptet. Im Gegenteil: Yo el Autor sí extra genannt! |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.10.2006 ▲ |
| |
| | | %Childmessage sabe mein Profano no
|
| | | | |
| | Jörg Sellmeyer | Na entonces umso größeren Dank! |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 06.10.2006 ▲ |
| |
|
RespuestaThemeninformationenDieses Thema ha 3 subscriber: |