Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.418 Beiträge
 
Delphi 7 Professional
 
#14

AW: Eintrag aus Stringgrid mit Eintrag aus Listview vergleichen sehr langsam

  Alt 31. Mär 2018, 17:29
Ist das richtig, Du nutzt Delphi 6?
Bei Delphi 7 verfügt TListView über die Methoden FindCaption und FindData. Gab es die bei Delphi 6 noch nicht?

Wenn es sie bereits geben sollte, könnten sie eventuell eine Alternative für die Suche sein, statt über alle Einträge zu iterieren.

Zitat von Delphi 7 - Hilfe:
FindCaption (Methode von TCustomListView)

Die Methode FindCaption gibt einen Listeneintrag mit dem angegebenen Titel zurück.

Delphi-Syntax:

function FindCaption(StartIndex: Integer; Value: string; Partial, Inclusive, Wrap: Boolean): TListItem;

C++ Syntax:

TListItem* __fastcall FindCaption(int StartIndex, AnsiString Value, bool Partial, bool Inclusive, bool Wrap);

Beschreibung

Mit FindCaption können Sie nach dem Eintrag in der Liste suchen, dessen Titel mit dem String im Parameter Value identisch ist. Wenn der Parameter Inclusive den Wert true hat, wird die Überprüfung bei dem in StartIndex angegebenen Listeneintrag begonnen. Andernfalls beginnt die Suche beim nächsten Element. Ist der Parameter Wrap true, wird die Suche am Anfang der Liste fortgesetzt, wenn der gesuchte Eintrag bis zum Listenende nicht gefunden wurde. FindCaption gibt den ersten Eintrag zurück, dessen Eigenschaft Caption mit Value identisch ist. Wenn der Parameter Partial auf true gesetzt wird, werden auch Titel gefunden, die mit dem Teilstring Value beginnen. Hat Partial den Wert false, wird nach einer genauen Übereinstimmung gesucht. Wenn kein Eintrag gefunden wird, gibt FindCaption nil (Delphi) bzw. NULL (C++) zurück.
Eine ganz blöde Idee:

Manchmal kann es die Arbeit mit visuellen Komponenten deutlich beschleunigen, wenn man das Programm solange minimiert.

Delphi-Quellcode:
procedure TForm1.ToolButton23Click(Sender: TObject);
var
  lvItem: TListItem;
begin
  Application.Minimize;
  for I := stringgrid2.RowCount-1 downto 1 do
  begin
    lvItem := FindListViewItem(ListView1, stringgrid2.Cells[0,i], 1);
    if lvItem <> nil then
    begin
     {mach was}
    end;
  end;
  Application.Restore;
end;
Und nein, elegant ist das nicht.
  Mit Zitat antworten Zitat