Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualStringTree und TTimer/JvThread/IdIcmpClient (https://www.delphipraxis.net/60620-virtualstringtree-und-ttimer-jvthread-idicmpclient.html)

Bigmichi 10. Jan 2006 09:17


VirtualStringTree und TTimer/JvThread/IdIcmpClient
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hey Leute hab mal wieder ein Problem =((

ich hab eine VirtualStringTree und dort werden ca. 50 Computer aufeinmal angezeigt jeder der Computer wird mit einem eigenem Thread überprüft ob er erreich bar ist mit der IdIcmpClient doch mein Problem ist wenn ich das netz wechsle sollen ja neue Computer geladen werden das klappt ja gut nur der speicher wird zugemüllt der er immer neue timer thread und idicmpclients erstellt wenn ich vor dem wechsel nun löschen will... klappt es manchmal aber manchmal bricht er ab =/ also debuggerfehler... ich denke mal ich stoppe und lösche die comps falsch könnt ihr mir helfen =))

Delphi-Quellcode:
type
  PEntry = ^TEntry;

  TEntry = record
    Name: String;
    IPAdresse: String;
    PCName: String;
    Passwort: String;
    Timer:TTimer;
    Thread:TJvThread;
    PingC:TIdIcmpClient;
    Online:Integer;
  end;


Delphi-Quellcode:
var
  T,T2:PVirtualNode;
  Data: PEntry;
begin

  T := Stree.GetFirst;
  if T <> Nil then begin
    T2 := STree.GetFirstChild(T);
      if T2 <> Nil then begin

        while assigneD(T2) do begin
          Data := STree.GetNodeData(T2);


          if Data.Thread <> Nil then begin
            Data.Thread.Terminate;
          end;

          if Data.Timer <> Nil then begin
            Data.Timer.Enabled := False;
            Data.Timer.Destroy;
          end;

          if Data.PingC <> nil then begin
            Data.PingC.Free;
          end;

          T2 := T2.NextSibling;
        end;
      end;
  end;

generic 10. Jan 2006 09:59

Re: VirtualStringTree und TTimer/JvThread/IdIcmpClient
 
stell doch einfach um auf objekt orientierte programmierung?

Delphi-Quellcode:
type
  TEntry = class
  public
    Name,
    IPAdresse,
    PCName,
    Passwort: String;
    Online:Integer;

    Timer:TTimer;
    Thread:TJvThread;
    PingC:TIdIcmpClient;

    constructor Create();
    destructor Destroy();
  end;

constructor TEntry.Create();
begin
  // hier die anderne objs erzeugen
end;

destructor TEntry.Destroy();
begin
  // hier die obj zerstören
end;
im form create
Delphi-Quellcode:
   vst.nodedatasize:=sizeof(tentry);
objekte in den vst:
Delphi-Quellcode:
var
  obj: TEntry;
begin
  obj:=TEntry.create;
  vst.addobject(nil, vst);
end;
im vst on free:
Delphi-Quellcode:
var
  obj: tentry;
begin
  obj:=tentry(vst.getnodedata(node)^);
  obj.free;
end;
im gettext vom vst:
Delphi-Quellcode:
var
  obj: tentry;
begin
  obj:=tentry(vst.getnodedata(node)^);
  case column of
    0: celltext:=obj.name;
    // hier die andern spalten
  end;
end;
das ist jetzt erstmal die vst optik gewesen.
programmtechnisch würde ich wohl einen timer verwenden für das ganze projekt und ein ping objekt.
diese beiden würden dann die liste durch eine iteration aktuell halten. (sicherstellen das der timer nicht 2 mal gleichzeitig ausgelöst wird)
oder den timer weg und einen thread (ist aber komplizierter)

ich denke du musst keine echtzeit anzeige haben, eine verzögerung von 5-10 sekunden sollte kein problem darstellen oder?

Bigmichi 11. Jan 2006 11:37

Re: VirtualStringTree und TTimer/JvThread/IdIcmpClient
 
Delphi-Quellcode:
vst.addobject(nil, vst);
geht bei mir garnet =((((

addobject bestizt meine komp garnet o.O
bitte um andere Vorschläge =))

generic 11. Jan 2006 16:10

Re: VirtualStringTree und TTimer/JvThread/IdIcmpClient
 
oh sorry das heist
Delphi-Quellcode:
vst.addchild(nil, obj);

himitsu 31. Mai 2006 15:08

Re: VirtualStringTree und TTimer/JvThread/IdIcmpClient
 
Zitat:

Zitat von generic
objekte in den vst:
Delphi-Quellcode:
var
  obj: TEntry;
begin
  obj:=TEntry.create;
  vst.addobject(nil, vst);
end;

du meinst bestimmt
Code:
var
  obj: TEntry;
begin
  obj:=TEntry.create;
  vst.addchild(nil, [color=#ff0000][b]obj[/b][/color]);
end;
[edit]
addobject > addchild ^^

generic 1. Jun 2006 10:27

Re: VirtualStringTree und TTimer/JvThread/IdIcmpClient
 
jup wie ich in #4 geschrieben habe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz