Seite 2 von 3

Verfasst: 13.03.2007 13:33
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)

Verfasst: 13.03.2007 13:38
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:

Verfasst: 13.03.2007 13:43
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

Verfasst: 13.03.2007 13:47
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:

Verfasst: 13.03.2007 13:47
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

Verfasst: 13.03.2007 14:21
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 ^^

Verfasst: 13.03.2007 14:36
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

Verfasst: 13.03.2007 14:48
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

Verfasst: 13.03.2007 15:00
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

Verfasst: 13.03.2007 15:06
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?