Avatar billede morten_s Nybegynder
19. juni 2002 - 08:43 Der er 2 kommentarer og
1 løsning

Free komponenter

jeg opretter nogle komponenter under runtime af typen TClientServer se http://www.eksperten.dk/spm/225886
disse vil jeg selvfølgelig gerne Free igen på et passende tidspunkt i min kode, min eneste reference til dem er at de har formen som forældre, derfor gør jeg følgende

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  cs : TClientSocket;
begin
  for i := 0 to ComponentCount-1 do
  begin
    if (Components[i] is TClientSocket) then
      if not (Components[i] as TClientSocket).Active then
        (Components[i] as TClientSocket).Free;
  end;
end;

Det virker fint når der kun er en hvis der er flere får jeg en ListIndex out of bounds, jeg tænker at det er fordi min ComponetCount ikke passer længere og måske ikke  hvordan løses det ?
Avatar billede borrisholt Novice
19. juni 2002 - 08:49 #1
Var det ikkeen ide at overgive sig til fjenden og bruge INDY ... Det andet ER noget skrammel. Jeg er forlængst holdt op med at bruge det ...

Jens B
Avatar billede morten_s Nybegynder
19. juni 2002 - 10:06 #2
Jens> Jeg kan sku' ikke få indy til at kører unblocked ????

Jeg bruger Indy når jeg kører blocked, altså har en på forhånd defineret protocol hvor jeg ved hvad min aTerminator er i min Readln
function ReadLn(const ATerminator: string; const ATimeout: integer): string; virtual;

I dette tilfælde skal jeg kører transperent i gennem, det virker i øvrigt fint..... jeg sender dig lige kopi af min kode
Avatar billede martinlind Nybegynder
19. juni 2002 - 10:57 #3
Når du sletter flere fra en liste kan du IKKE bruge en FOR løkke, da du kun "henter" Count én gang men faktisk laver den en mindre hver gang du sletter, så du SKAL bruge en while-løkke sådan :


procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  cs : TClientSocket;
begin
  i := 0;
  while 1 <= ComponentCount-1 do
  begin
    if (Components[i] is TClientSocket) then
      if not (Components[i] as TClientSocket).Active then
        (Components[i] as TClientSocket).Free;
  end;
end;


/Martin
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