ListIconGadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

ListIconGadget

Beitrag von ProgOldie »

Gibt's einen Weg, mit dem man bei einem ListiconGadget nach einem Event wie #PB_EventType_LeftDoubleClick ermitteln kann, auf welche Spalte der Doppelklick erfolgte? Ich möchte nämlich die angeklickte Zelle ermitteln, wobei man die Zeile ja mit GetGadgetState erhält. Es würde auch reichen, wenn man zur angeklickten Zelle die Bezeichnung des Spaltenkopfes zurückgereicht bekommt.

Gruß und Dank!
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: ListIconGadget

Beitrag von Bisonte »

RSBasic's Winapi Library : http://www.rsbasic.de/aktualisierung/wi ... swerten.pb

Ist es das was du suchst ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: ListIconGadget

Beitrag von Pelagio »

Hallo ProgOldie,

ich habe einmal in meine alten Codeschnitzel nachgeschaut und dies gefunden:

Code: Alles auswählen

Enumeration
   #Win
   #LVG
EndEnumeration

Procedure LvMausclick(vID.i, *vP.Point)
   Protected pLVH.LVHITTESTINFO
  
   GetCursorPos_   (*vP)  ;wo ist Maus 
   MapWindowPoints_(0, vID, *vP, 1)
   pLVH\pt\x = *vP\x
   pLVH\pt\y = *vP\y
   SendMessage_(vID, #LVM_SUBITEMHITTEST, 0, pLVH)                
   *vP\y = pLVH\iItem      ;row ab 0
   *vP\x = pLVH\iSubItem   ;col ab 0
EndProcedure

OpenWindow(#Win, 0, 0, 300,420,"ListIcon Gadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
       
  ListIconGadget(#LVG, 10, 10, 280, 400, "Spalte 0", 140, #PB_ListIcon_GridLines);|#PB_ListIcon_FullRowSelect)
  AddGadgetColumn(#LVG, 1,"Spalte 1",55) 
  AddGadgetColumn(#LVG,2,"Spalte 2",55) 
  For n=0 To 16 
    txt$ = "Text in Zeile " + LSet(Str(n), 3, " ")  + " in Spalte 0" + #LF$ + Str(Random(99)) + #LF$ + Str(n)
    AddGadgetItem(#LVG, -1, txt$) 
  Next n

;=====================================================

Repeat
   Event = WaitWindowEvent(1) 
   If (Event=#PB_Event_Gadget) And (EventGadget()=#LVG)
      If (EventType()=#PB_EventType_LeftClick)
         LvMausclick(GadgetID(#LVG), p.Point) 
         Debug GetGadgetItemText(#LVG, p\y, p\x)
      EndIf
   EndIf
Until (Event=#PB_Event_CloseWindow)

End 


am Ende ist dies nichts anderes als was bei RSBasic's Winapi Library steht wie Bisonte schon gelinkt hat.
Ich glaube/hoffe aber das es etwas verständlicher ist. :allright:
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Stephan-X
Beiträge: 80
Registriert: 30.07.2008 16:02
Computerausstattung: PC 8 GB RAM NVIDIA Grafik 1 TB RAID // Ubuntu Mate 64 Bit // Pure 6.0 64
Wohnort: Oberösterreich

Re: ListIconGadget

Beitrag von Stephan-X »

Eventuell Hilft das ..

Code: Alles auswählen

Case #List_0
               If EventType() = #PB_EventType_Focus
               ElseIf EventType() = #PB_EventType_RightDoubleClick
                    ; Reihe ermitteln die ausgewählt wird
                    Reihe.l = GetGadgetState(#List_0)  ;Welcher Satz wurde angeklickt 
                    If Reihe.l <> -1 
                         ZeileP = Val(GetGadgetItemText(#List_0,Reihe.l,10)) ;hier wird die 11. Spalte gelesen
                         
                    .... weiterer code
                    Endif
               Endif
                            
Wenn Sie nichts zu Tun haben, tun Sie es bitte nicht hier.
Benutzeravatar
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

Re: ListIconGadget

Beitrag von ts-soft »

@Stephan-X
Den verstehe ich nicht, zu mal ein ListIcon gar kein #PB_EventType_Focus unterstützt.
Wo die Werte ermittelt werden kann ich auch nicht erkennen.
Vielleicht machste da mal eine ausführbare Version daraus, mit diesem Ausschnitt wird wohl niemand
klar kommen.

Ich bin jedenfalls der Meinung, Dein Vorschlag kann nicht funktionieren.

Gruß
Thomas
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.
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: ListIconGadget

Beitrag von ProgOldie »

Dank an Bisonte!
Übrigens ist http://www.rsbasic.de/winapi-library/ eine super-WinAPI-Sammlung, auf die Anfänger 'mal generell unter 'Links' und 'Private Webseiten' hingewiesen werden könnten.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: ListIconGadget

Beitrag von bobobo »

geht das auch andersrum ?

ich habe ein Listicongadget und benötige
dort die Koordinaten der einzelnen Felder
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Re: ListIconGadget

Beitrag von hjbremer »

bobobo hat geschrieben:geht das auch andersrum ?

ich habe ein Listicongadget und benötige
dort die Koordinaten der einzelnen Felder
siehe MSDN - LVM_GETSUBITEMRECT
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
BSP
Beiträge: 203
Registriert: 01.02.2009 14:04

Re: ListIconGadget

Beitrag von BSP »

Eine Möglichkeit:
Den Teil ab "Ergänzung" einfach in die Procedure einfügen.

Code: Alles auswählen

Procedure LvMausclick(vID.i, *vP.Point)
   Protected pLVH.LVHITTESTINFO
   
   GetCursorPos_   (*vP)  ;wo ist Maus 
   MapWindowPoints_(0, vID, *vP, 1)
   pLVH\pt\x = *vP\x
   pLVH\pt\y = *vP\y
   SendMessage_(vID, #LVM_SUBITEMHITTEST, 0, pLVH)                
   *vP\y = pLVH\iItem      ;row ab 0
   *vP\x = pLVH\iSubItem   ;col ab 0
   
; --- Ergänzung
    Protected rec.RECT , i
    SendMessage_(vid, #LVM_GETSUBITEMRECT, *vp\y, rec)
    rec\left=0
    rec\right=rec\left+GetGadgetItemAttribute(#LVG,-1,#PB_ListIcon_ColumnWidth,0)
    If *vP\x >0
      For i=1 To *vP\x
        rec\left+GetGadgetItemAttribute(#LVG,-1,#PB_ListIcon_ColumnWidth, i-1)
        rec\right=rec\left+GetGadgetItemAttribute(#LVG,-1,#PB_ListIcon_ColumnWidth,i)
      Next
    EndIf
    Debug "-----"
    Debug rec\left
    Debug rec\right
    Debug rec\top
    Debug rec\bottom
    Debug "  "
EndProcedure
Geht bestimmt noch besser, funktioniert aber.

Gruß: Bernd
PB 5.31 (x86) & (x64) Win10
Antworten