Autor Beitrag
accessViolation
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 68

Win
Delphi 5 Enterpr.
BeitragVerfasst: Mo 12.12.05 16:15 
Hallo,

ich möchte aus einem JvImagesViewer Elemente löschen. Sollte eigentlich ganz einfach gehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button1Click(Sender: TObject);
begin
// showmessage(inttostr(JvImagesViewer1.selectedIndex));
   if JvImagesViewer1.selectedIndex <> -1 then
      JvImagesViewer1.Items[JvImagesViewer1.selectedIndex].Delete;
end;


Wenn ich auf den Button klicke, wird das markierte Element gelöscht. Nach dem Löschen ist kein Element mehr markiert (zumindest nicht sichtbar markiert). Wenn ich dann nochmal auf den Button klicke, wird wieder ein Element gelöscht, obwohl keins markiert ist. Der selectedIndex bleibt gleich, sollte meiner Meinung nach aber -1 sein, wenn die Markierung wieder entfernt wird.

Hat jemand eine Idee, wie ich zuverlässig herausfinden kann, ob ein Element markiert ist (also blau umrandet)?

Gruß
Dietmar
accessViolation Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 68

Win
Delphi 5 Enterpr.
BeitragVerfasst: Di 13.12.05 09:58 
Ich bekam grade den Tip, nach jedem Löschen JvImagesViewer.selectedIndex manuell auf -1 zu setzen. So ist schonmal die Gefahr weg, Elemente zu löschen, die man gar nicht löschen wollte.

Ein Problem gibt es jetzt noch, und zwar, wenn man mehrere Elemente auswählt (MultiSelect-Eigenschaft auf True). Ich möchte ja wissen, welche Elemente alle ausgewählt sind.

Hat da vielleicht jemand eine Idee? Vielleicht das OnMouseUp-Ereignis ausnutzen, um bei jedem Mausklick das gerade selektierte Element in ein Array zu schreiben und dieses Array beim Löschen durchgehen?

Gruß
Dietmar
x000x
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 13.12.05 23:35 
Moin moin,
user profile iconaccessViolation hat folgendes geschrieben:
Hat da vielleicht jemand eine Idee?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
type
   TIntegerArr = Array of Integer;

procedure GetSelectedItems(const JvImgViewer: TJvImagesViewer; var ArrRes: TIntegerArr);
var i, c: Integer;
begin
   c := 0;
   // set max length
   SetLength(ArrRes, JvImgViewer.Count);
   for i := 0 to JvImgViewer.Count - 1 do
      // PS: du musst die Unit ComCtrls in deine Uses mit aufnehmen
      if cdsSelected in JvImgViewer.Items[i].State then begin
         ArrRes[c] := i;
         inc(c);
      end;
   // set true length
   SetLength(ArrRes, c);
end;

//...
// Mit folgendem Aufruf bekommst du dann ein Array mit den Indizes der selektierten Items
var SItems: TIntegerArr;
begin
   GetSelectedItems(ImgViewer, SItems);
//...


Eine einfachere Möglichkeit ist mir nicht bekannt...
Gruss
accessViolation Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 68

Win
Delphi 5 Enterpr.
BeitragVerfasst: Do 15.12.05 21:46 
So was ähnliches hatte ich mir auch schon gedacht. Aber ich wußte nicht, daß JvImagesViewer.Items[i].State mir einen Wert liefert, der mir sagt, ob ein Element selektiert ist oder nicht.

Dann werde ich das bei Gelegenheit mal so probieren (im Moment muß ich noch andere Bugs fixen ;) ). Danke!

Gruß
Dietmar