![]() |
GetItemAtPos macht bei Listbox manchmal probleme
Hi Leute.
Ich habe ein Problem mit einem Abschnitt in meinem Programm. Dieser Abschnitt soll bei einem Rechtklick auf ein Item in meiner ListBox, den Text des entsprechenden Items ändern. Das klappt auch, aber nur manchmal. Wenn ich z.B. neue Elemente zu der listbox hinzufüge, dann passiert es manchmal dass die letzten 1-3 Einträge nichtmehr klickbar sind. Ich realisiere das ganze mit ItemAtPos() was mir dann bei diesen Einträgen den Index -1 zeigt. Daneben habe ich auch nicht geklickt, da bin ich mir sicher. Ich habe auch bis jetzt noch nicht herausgefunden wie ich den Fehler zuverlässig reproduzieren kann. Manchmal klappt alles. Aber hier erstmal der Code:
Delphi-Quellcode:
So der Code wär vl. auch eleganter möglich gewesen, aber mir geht es ja zurzeit ertmal um den Bugfix.
procedure TForm2.ListBox2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var cursorpos : TPoint; ItmIndx : integer; begin Label1.Caption := ListBox2.Items[ListBox2.COunt-1]; if Button=mbRight then begin cursorpos.X := X; cursorpos.Y := y; ItmIndx := 0; ItmIndx := ListBox1.ItemAtPos(cursorpos,true); if ItmIndx = -1 then begin end //vl Fokus setzen weil er durch ungültige Position verloren geht?? else begin ListBox2.ItemIndex := ItmIndx; try if AnsiLastChar(ListBox2.Items[ItmIndx]) = '▲' then begin ListBox2.Items[ItmIndx] := StringReplace(ListBox2.Items[ItmIndx], '▲', '▼',[rfReplaceAll, rfIgnoreCase]); end else if AnsiLastChar(ListBox2.Items[ItmIndx]) = '▼' then begin ListBox2.Items[ItmIndx] := StringReplace(ListBox2.Items[ItmIndx], '▼','▲',[rfReplaceAll , rfIgnoreCase]); end; except end; end; end; end; Die Ästhetik muss sich noch gedulden. Dann hoffe ich mal dass mir jemand helfen kann. Bin neu hier im Forum, also wenn ich was an der Art meiner Fragestellung ändern soll, gerne bescheid sagen. Danke schonmal |
AW: GetItemAtPos macht bei Listbox manchmal probleme
Oh mir ist gerade aufgefallen dass ich das thema in einen völlig Falsche Kategorie hab. Kann man das einfach verschieben?
|
AW: GetItemAtPos macht bei Listbox manchmal probleme
Kannst Du evtl. entweder ein Projekt oder wenigstens eine Setup-Routine zum Füllen der Listbox posten?
|
AW: GetItemAtPos macht bei Listbox manchmal probleme
Natürlich. Also hier hab ich noch die zwei Routinen für das Füllen und leeren. Dabei soll man sozusagen mit einem Klick auf ein Item jenes in die jeweils andere
Listbox schreiben:
Delphi-Quellcode:
procedure TForm2.ListBox1Click(Sender: TObject);
var I :Integer; begin for I := 0 to ListBox1.Count-1 do if ListBox1.Selected[I] = True then begin ListBox2.Items.Add(ListBox1.Items[I] + ' ▼'); ListBox1.Items.Delete(I); break; end; ListBox1.Height := 16 * ListBox1.Count; // geschmackssache ListBox2.Height := 16 * ListBox2.Count; // geschmackssache end; procedure TForm2.ListBox2Click(Sender: TObject); var I :Integer; begin for I := 0 to ListBox2.Count-1 do if ListBox2.Selected[I] = True then begin // SortType[I] := Null; ListBox2.Items[I] := StringReplace(ListBox2.Items[I], ' ▼','',[rfReplaceAll , rfIgnoreCase]); ListBox2.Items[I] := StringReplace(ListBox2.Items[I], ' ▲','',[rfReplaceAll , rfIgnoreCase]); ListBox1.Items.Add(ListBox2.Items[I]); ListBox2.Items.Delete(I); break; end; ListBox1.Height := 16 * ListBox1.Count; // geschmackssache ListBox2.Height := 16 * ListBox2.Count; // geschmackssache end; |
AW: GetItemAtPos macht bei Listbox manchmal probleme
Übrigens falls es jemanden interessiert, ich habe es nun einfach mit ListViews gemacht, da kann ich dann auch noch
Icons reinmachen und muss nicht unbedingt die blöden Sonderzeichen als Zeile verwenden. Code dazu ist überall online aber wer ihn will solls einfach sagn, dann such ich ihn raus. Ich weis übrigens immernoch nicht wie man eingene Threads im Forum löscht oder als geschlossen markiert. Wenn jmd nen Tipp hätte wärs nich schlecht. Ist warscheinlich ziemlich leicht und ich stell mich einfach blöd an. |
AW: GetItemAtPos macht bei Listbox manchmal probleme
Löschen wäre ja doof, denn dann hätte niemand etwas davon, der in Zukunft das gleiche/ähnliche Problem hat.
Jedes mal, wenn du antwortest, gibt es unter dem Editor eine CheckBox mit dem Text: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz