Avatar billede Slettet bruger
11. oktober 2005 - 13:45 Der er 6 kommentarer og
1 løsning

listbox out of bound

jeg har en timer som checker *.exe filer i en listbox om de er kørende er de det, bliver de lukket ved en funktion killtask

men hvergang får jeg en fejl om list out of bound når funktionen
skal kører
timeren er sat til 5000 (5 sekunder)

hvor ligger fejlen

her er funktionen:
function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

her er kaldet til funktionen:

KillTask(ListBox2.Items[ListBox2.ItemIndex]);
Avatar billede tolderlund Nybegynder
11. oktober 2005 - 14:18 #1
"List index out of bound" betyder som regel at det index du bruger i Items[] er forkert. Hvilken værdi har ListBox2.ItemIndex når du kalder funktionen?
(Jeg gætter på -1).
Sørg for at du bruger en værdi der ligger mellem 0 og ListBox2.Items.Count-1.
Avatar billede Slettet bruger
11. oktober 2005 - 18:09 #2
KillTask(ListBox2.Items[-1][ListBox2.ItemIndex]);

så får jeg en list out of bound[-1] hvis jeg bruger count får jeg en fejl om array

hvad er den korekte kode?
Avatar billede tolderlund Nybegynder
12. oktober 2005 - 08:23 #3
"Hvad er den korrekte kode?"
Det lyder som om du ikke ved hvad du vil?
Du skal bruge et korrekt index til ListBox2.Items.
Det korrekte index afhænger af hvilket Item du vil have fat i.
Det er svært at komme det nærmere uden at kende dit program.
Stil dig selv et spørgsmål:
Hvilket Item vil du bruge?
Hvilket index har det Item?
Avatar billede Slettet bruger
12. oktober 2005 - 13:22 #4
jeg ved godt hvad jeg vil:

det er killtask som skal gå efter alle item i listboxen og ikke et bestemt, da indholdet i listboxen er brugerafhængig og jeg derfor ikke ved hvor mange items der bliver lagt i.
Avatar billede tolderlund Nybegynder
12. oktober 2005 - 14:18 #5
Så laver du da bare et loop der kører alle items gennem.
for i := 0 to ListBox2.Items.Count-1 do
  KillTask(ListBox2.Items[i]);
Er det ikke det du vil?
Avatar billede Slettet bruger
12. oktober 2005 - 19:40 #6
det virker bare mange mange tak tolderlund

her er point og jeg tildeler dig karma også
Avatar billede tolderlund Nybegynder
13. oktober 2005 - 13:19 #7
Takker mange gange.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester