In ListIconGadget zu einem Eintrag springen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Code: Alles auswählen

For i=iStart To ItemCount 
         Label$ = GetGadgetItemText(GadgetID,i,Column) ; :P

         If CompareMemoryString(Expression,@Label$,0,Length) = 0 
            Position = i : Break 
         EndIf 
      Next 
   EndIf
:roll: :lol: :twisted:
Naja :allright:
Damit lässt sich schon was machen thx

Btw.
Such ma dein Code nach dem GadgetID ab, da is noch irgendwon Fehler (ListGadget auf 1 setzen unten in List 1 suchen, result = -1)
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Das ist also der Dank oder was? :evil:

Naja, wenigstens benutzt du deine Murmel auchmal zum denken und man muss nicht alles vorkauen! :mrgreen:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Ich mach das doch nur für die Leutz die (ich weiß, wer sucht schon :freak: ) mal nach sowas suchen und dann ein unkorrekten Code finden.

P.s. War doch kein Fehler, hatte istart mit i verwechselt :roll:

Hier der funktionierende Code auch wenn List nicht 0 ist

Code: Alles auswählen

ListID = 0

OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1) 
CreateGadgetList(WindowID(0)) 
ListIconGadget(ListID,5,5,390,290,"Index",50,#PB_ListIcon_FullRowSelect) 
AddGadgetColumn(ListID,1,"Name",200) 
AddGadgetColumn(ListID,2,"CRC32",100) 

For i=1 To 100 
   Label$ = "List-View Control Item #" + Str(i) 
   AddGadgetItem(ListID,-1,Str(i) + Chr(10) + Label$ + Chr(10) + "$" + Hex(CRC32Fingerprint(@Label$,Len(Label$)))) 
Next 

Procedure FindListItem(GadgetID.w,Expression.l,fMode.b=0,Column.b=0,iStart.l=0) 
   Protected hwndListbox.l, Position.l, ItemCount.l, Length.l, i.l 
    
   hwndListbox = GadgetID(GadgetID) : Position = -1 
    
   If fMode 
      Position = Expression 
   Else 
      ItemCount = CountGadgetItems(GadgetID) - 1 

      Length = lstrlen_(Expression) 
       
      For i=iStart To ItemCount 
         Label$ = GetGadgetItemText(GadgetID,i,Column) 

         If CompareMemoryString(Expression,@Label$,0,Length) = 0 
            Position = i : Break 
         EndIf 
      Next 
   EndIf 

   SendMessage_(hwndListbox,#LVM_ENSUREVISIBLE,Position,1) 
    
   If Position > SendMessage_(hwndListbox,#LVM_GETCOUNTPERPAGE,0,0)-1 
      SendMessage_(hwndListbox,#WM_VSCROLL,#SB_PAGEDOWN,0) 
      SendMessage_(hwndListbox,#WM_VSCROLL,#SB_LINEUP,0) 
   EndIf    
    
   SetGadgetItemState(GadgetID,Position,#PB_ListIcon_Selected) 
   SetActiveGadget(GadgetID) 
    
   ProcedureReturn Position 
EndProcedure 

Debug FindListItem(ListID,@"List-View Control Item #73",0,1) 

While WaitWindowEvent() ! 16 : Wend
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

P.s. War doch kein Fehler, hatte istart mit i verwechselt
Das meinte ich nicht! Sondern das ich bei GetGadgetItemText() wieder NULL anstatt die GadgetID verwendet hab. :wink:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

@Sen-me

Wie heischd das noch: Lass mir schaffe oder lass mich schaffe?

Antwort: Weder noch, lass annere schaffe!

Gruß in die Heimat
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

EDIT:

Öhm wenn ich ein 2. mal suche, dann scrollt der bis ganz unten Oo
Sucht mal nach der Index 73 dann 40 oder 80
Bei 19 klappts und bei 100 auch Oo ka wieso
jear hat geschrieben:@Sen-me

Wie heischd das noch: Lass mir schaffe oder lass mich schaffe?

Antwort: Weder noch, lass annere schaffe!

Gruß in die Heimat
Keine Ahnung auf was du das jetzt bezogen hast, aber ich kenn mich mit WinAPI 0,0 aus, ich hätt das nie gefunden :(
Und da debug ich halt den Code dann hab ich wenigstens was gemacht ^^
Es gibt hier im Forum sicherlich Leute die würden sagen "wieso zeigt der das nicht in meiner ListIconGadget(1,....) an" weilse nitmal den Code angeschaut haben /:->

@Microsoft
Nächstes Windows bitte ohne Copy&Paste, danke ^^
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Alles gefixt!

Code: Alles auswählen

#LST_Listbox = 101

OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1)
CreateGadgetList(WindowID(0))
ListIconGadget(#LST_Listbox,5,5,390,290,"Index",50,#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#LST_Listbox,1,"Name",200)
AddGadgetColumn(#LST_Listbox,2,"CRC32",100)

For i=1 To 100
	Label$ = "List-View Control Item #" + Str(i)
	AddGadgetItem(#LST_Listbox,-1,Str(i) + Chr(10) + Label$ + Chr(10) + "$" + Hex(CRC32Fingerprint(@Label$,Len(Label$))))
Next

Procedure FindListItem(GadgetID.w,Expression.l,fMode.b=0,Column.b=0,iStart.l=0)
	Protected hwndListbox.l, Position.l, ItemCount.l, Length.l, i.l, Label.s
	
	If Not IsGadget(GadgetID) : ProcedureReturn -1 : EndIf
	
	hwndListbox = GadgetID(GadgetID) : Position = -1
	
	If fMode
		Position = Expression
	Else
		ItemCount = CountGadgetItems(GadgetID) - 1

		Length = lstrlen_(Expression)
		
		For i=iStart To ItemCount
			Label = GetGadgetItemText(GadgetID,i,Column)

			If CompareMemoryString(Expression,@Label,0,Length) = 0
				Position = i : Break
			EndIf
		Next
	EndIf
	
	SendMessage_(hwndListbox,#WM_VSCROLL,#SB_TOP,0)
	SendMessage_(hwndListbox,#LVM_ENSUREVISIBLE,Position,1)
	
	If Position > SendMessage_(hwndListbox,#LVM_GETCOUNTPERPAGE,0,0)-1
		SendMessage_(hwndListbox,#WM_VSCROLL,#SB_PAGEDOWN,0)
		SendMessage_(hwndListbox,#WM_VSCROLL,#SB_LINEUP,0)
	EndIf	
		
	SetGadgetItemState(GadgetID,Position,#PB_ListIcon_Selected)
	SetActiveGadget(GadgetID)
	
	ProcedureReturn Position
EndProcedure

Result = FindListItem(#LST_Listbox,@"List-View Control Item #73",0,1)
FindListItem(#LST_Listbox,@"List-View Control Item #78",0,1,Result)

While WaitWindowEvent() ! 16 : Wend
Zuletzt geändert von Fluid Byte am 13.03.2007 14:54, insgesamt 1-mal geändert.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

Signed()

:allright:
Jetzt versteh ich zwar gar nix mehr aaaaber es geht, hoff ich jetz zumindest xD

Noch eine Frage:
Was wäre wenn ich jetzt z.B. Spalte 1 und 2 in eine Suche einbeziehen will?

Ich nehm an das hat was damit zu tun?

Code: Alles auswählen

For i=iStart To ItemCount 
         Label = GetGadgetItemText(GadgetID,i,Column) 

         If CompareMemoryString(Expression,@Label,0,Length) = 0 
            Position = i : Break 
         EndIf 
      Next
Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Was wäre wenn ich jetzt z.B. Spalte 1 und 2 in eine Suche einbeziehen will?
Ahhhhhh! Diggaaaaa! Wat' machst du mit mir? :shock:

* damit rückt der jetzt raus und ich dacht noch fragste liba noch mal nach ... *

Nun ja, ich muss erst noch was anderes erledigen aber erklär doch bidde schon mal was "mit einbeziehen" bedeutet:

A.) Du willst einfach in einer anderen Spalte suchen
B.) Du willst alle Spaltenwerte eines items zusammen packen und darin suchen
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
sen-me
Beiträge: 478
Registriert: 17.07.2005 16:02
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von sen-me »

xD ja ich will dir doch nur die langeweile verderben xD

Aber ich glaube ich habs, kp obs funktioniert ^^

Code: Alles auswählen

Procedure FindListItem(GadgetID.w,Expression.l,fMode.b=0,Column.b=0,Column2.b=-1,iStart.l=0)

Code: Alles auswählen

For i=iStart To ItemCount 
         Label = GetGadgetItemText(GadgetID,i,Column) 

         If CompareMemoryString(Expression,@Label,0,Length) = 0 
            Position = i : Break 
         EndIf 

         If Column2 > -1
            Label = GetGadgetItemText(GadgetID,i,Column2)
            
            If CompareMemoryString(Expression,@Label,0,Length) = 0 
               Position = i : Break 
            EndIf
         EndIf
      Next
Nun sucht der falls eine 2. Spalte angegeben ist in beiden Spalten oder?
Bild
Antworten