Announcement

Collapse
No announcement yet.

Problem beim automatischen markieren von ListItems bei einem ListView

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem beim automatischen markieren von ListItems bei einem ListView

    Hallo,

    in meinem Programm nutze ich ein ListView im Reportformat zum anzeigen mehrer Einträge. Wenn man auf die erste Spalte klickt kann man einen Suchtext eingeben und der gefunde Eintrag/ListItem wird direkt markiert als wenn man den Eintr ag angeklickt hätte (blau hinterlegt) wenn ich aber den Suchstring beim Start der Anwendung als Parameter mitgebe um direkt den entsprechenden Eintrag beim Start der Anwendung zu markieren kommt eine Exception der Klasse "EAccessViolation" im folgenden der verwende Code zum Suchen und markieren des Eintrages, wer hat einen Tipp?

    <PRE>
    procedure TForm1.lv_suche(ListView:TListView;Column:TListCol umn;autostring:string);
    var ListItem:TListItem;
    suchstring:string;
    begin
    if autostring <> '' then
    suchstring:=autostring
    else if Column.Index = 0 then
    InputQuery('Suche','Bitte geben Sie den Suchtext für '+Column.Caption+' ein!',suchstring);
    if suchstring <> '' then begin
    ListItem:=ListView.FindCaption(0,suchstring,true,t rue,true);
    if ListItem <> nil then begin
    ListView.SetFocus;
    ListView.ItemFocused:=ListItem;
    ListItem.Selected:=true;
    ListItem.Focused:=true;
    end;
    end;
    end;
    </PRE>

    Grüße Hendrik

  • #2
    Hallo Hendrik <br>
    vieleicht solltest du ListItem vorher erzeugen<br>
    <pre>
    ListItem:=TListItem.create(ListView.FindCaption(0, suchstring,true,true,true));
    //mach was...
    ListItem.free;
    </pre>
    Ist nur ne Idee ich habe den alten Gram schon ewig nicht mehr benutzt<br>
    Gruß Andrea

    Comment


    • #3
      Hallo,

      nein das geht leider nicht da der Konstruktor wiefolgt aussieht:

      constructor Create(AOwner: TListItems);

      Und die Suche gibt ja schon ein ListItem zurück, also muss es nicht extra mit create erzeugt werden. Wenn das Programm gestartet ist und ich über die Suchmaske mit QueryInput gehe wenn der User auf die Spalte im ListView geklickt hat, dann funktioniert die Procedure auch ohne Probleme?

      Grüße Hendri

      Comment


      • #4
        Moin Hendrik,<br>
        <br>
        an welcher Stelle wird denn beim Programmstart die Methode aufgerufen?<br>
        Existiert der Listview da schon, bzw. das ListItem?<br>
        <br>
        Oder geh' doch mal im Einzelschritt durch das Programm (Strg-F7, Strg-F8), um die Exakte Stelle an der der Fehler auftritt zu ermitteln.<br>
        <br>
        Ciao<br>
        Chri

        Comment


        • #5
          Hallo,

          die Exception habe ich nun nicht (war ein anderes Problem) aber es wird immer noch kein Eintrag direkt beim Start ausgewählt, die Prozedure wird bei dem onShow Event des Forms ausgeführt. Wenn man die Procedure jedoch manuell über einen klick auf die Spalte des ListViews aufruft wird der Eintrag markiert. Hier nochmal mein Code zum markieren des Eintrages (so das der Eintrag blau hinterlegt ist), die Variable ListItem enthält auch 100%ig einen Wert:

          <PRE>
          if ListItem <> nil then begin
          ListView.SetFocus;
          ListView.ItemFocused:=ListItem;
          ListItem.Selected:=true;
          ListItem.Focused:=true;
          end;
          </PRE&gt

          Comment


          • #6
            Moin Hendrik,<br>
            <br>
            also ich hab's mit D5Pro SP1 / W2K SP2 ausprobiert.<br>
            Funktioniert bei mir, auch im OnShow, problemlos.<br>
            Kann es sein, dass Du HideSelection des ListView auf true stehen hast?<br>
            Wenn dann der Focus zu einem anderen Control wechselt, sieht es so aus als wäre im Listview kein Eintrag markiert.<br>
            <br>
            Ciao<br>
            Chri

            Comment

            Working...
            X