AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Schriftfarbe einer Zeile in der Listbox ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

Schriftfarbe einer Zeile in der Listbox ändern?

Ein Thema von Chris1986 · begonnen am 21. Sep 2003 · letzter Beitrag vom 22. Sep 2003
Antwort Antwort
Seite 2 von 2     12   
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Schriftfarbe einer Zeile in der Listbox ändern?

  Alt 21. Sep 2003, 19:54
Ich weiß, das ich nerve, aber eins muss ich noch wissen.

Wie mach ich das denn?
Also, lade ich erst alle IP's in die Listbox & arbeite sie dann ab, oder mache ich das so:

lstbErgebnis.items.add ('Es ist eigentlich egal was hier steht')
Delphi-Quellcode:
var
iReturnedBytes :integer;
status :string;

implementation
procedure TLanPing.lstbErgebnisDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
pingIP //diese Prozedur wird aufgerufen, um die IP zu pingen
//die Bytes werden in der Prozedur auf die Globale Variable iReturnedBytes gesetzt
  if iReturnedBytes<>0
    then
    begin
      lstbErgebnis.Canvas.Font.Color := clgreen;
      status := 'online';
    end
    else
    begin
      lstbErgebnis.Canvas.Font.Color := clred;
      status := 'offline';
    end;
  lstbErgebnis.Canvas.TextOut(Rect.Left,Rect.Top,lstbErgebnis.'Die IP ist '+status)
end;
Kann man das so machen?

Gruß
Christian
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Schriftfarbe einer Zeile in der Listbox ändern?

  Alt 21. Sep 2003, 20:00
Zitat von Chris1986:
Ich weiß, das ich nerve, [...]
Tust du nicht.

Zitat von Chris1986:
Also, lade ich erst alle IP's in die Listbox & arbeite sie dann ab,
Das ist eine Möglichkeit
Zitat:
oder mache ich das so:
Das ist eine andere Möglichkeit.

Zitat:
Kann man das so machen?
Wenn die Prozedur pingIP die anzupingende IP selbst kennt. Ansonsten sollte das funktionieren.

Chris
  Mit Zitat antworten Zitat
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Schriftfarbe einer Zeile in der Listbox ändern?

  Alt 21. Sep 2003, 20:11
Hm, es gibt das nächste Problem.
Das mit dem Ping habe ich über die Indy-Komponenten realisiert.
Ich kann also eine Prozedur schreiben, die einen Host pingt.
Die Sache ist nur, dass ich die Antwort durch das Ereignis OnReply von der Indy-Komponente bekomme, und dann erst die Daten in die Listbox schreibe.
Ich will damit nur sagen, dass es nichts bringt, wenn ich eine Prozedur im OnDrawItem aufrufe, oder sehe ich das falsch?

Gruß
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#14

Re: Schriftfarbe einer Zeile in der Listbox ändern?

  Alt 21. Sep 2003, 20:42
Hallo Chris,
ich habe das Gefühl, dass Du ein Design-Problem hast.
Ich weiss nicht was Andere empfehlen. Ich empfehle folgendes.
Schreibe Dir eine Klasse, die den Status der PC's repräsentiert.
Z.B.
Delphi-Quellcode:
Type
  TComputerState = class(TObject)
  private
    FIPAddress : String;
    FOnline : Boolean;
  public
    property IPAddress : String read FIPAddress write FIPAddress;
    property Online : Boolean read FOnlien write FOnline;
  end;
Jetzt schreibst Du Dir eine Klasse, die die og. Klasse verwaltet.
Z.B. so:
Delphi-Quellcode:
TComputerStates = class(TObject)
private
  FList : TList;
public
  constructor Create;
  destructor Destroy; override;
  function Add(aIPAddress : String) : TComputerState;
  procedure Clear;
  function Count : Integer;
  procedure Ping;
  property Items[X : Integer] : TComputerState read GetItems; default;
end;

...
constructor TComputerStates.Create;
begin
  inherited Create;
  FList:=TList.Create;
end;

destructor Destroy;
begin
  Clear;
  FList.Free;
  inherited Destroy;
end;

function TComputerStates.Add(aIPAddress : String) : TComputerState;
begin
  Result:=TComputerState.Create;
  FList.Add(Result);
end;

procedure TComputerStates.Clear;
var
  iCnt : Integer;
begin
  For iCnt:=0 to Count-1 do
    TObject(FList[iCnt]).Free;
  FList.Clear;
end;

function TComputerStates.Count;
begin
  Result:=Flist.Count;
end;

function TComputerStates.GetItems;
begin
  Result:=TComputerState(FList[X]);
end;

procedure TComputerStates.Ping;
{In dieser procedure durchläufst Du alle Items holst Dir die IP-Adresse
und pingst die Adresse an. Wenn der Rechner antwortet setzt Online auf True.
Wenn der Rechner nicht antwortet eben auf False}

var
  iCnt : Integer;
For iCnt:=0 to Count-1 do
  Items[iCnt].Online:=DeinePingFunktion(Items[iCnt].IPAddress);
end;
In deinem Hauptprogramm deklarierst Du Dir im private Abschnitt des Forms eine Instanz vom Type FComputerStates : TComputerStates.
Vor dieser Instanz kannst Du dann im OnCreate-Event mitFComputerStates : TComputerStates.Create; und im OnDestroy-Event des Forms kannst das Objekt dann wieder zerstörenFComputerStates.Free Du kannst dann mit FComputerStates.Add ein paar IP-Adressen hinzufügen. Da Du eine TListBox hast muss jetzt die TListBox etwas über Deine TComputerState Objekte wissen. Das könntest Du wie folgt machen
ListBox1.Items.AddObject(IPAdress,FComputerStates.Add(IPAdress)) Was passiert hier: Über FComputerStates.Add(IPAdress) wird eine
FComputerState Ojektreferenz zurückgegeben. Diese Referenz wir in der Objeckts Eigenschaft der Items-Eigenschaft von TListBox gespeichert. In der ListBox wird als der Inhalt von IPAdress angezeigt.
Was bringt das ganze ?
Dieses Verfahren mag auf den ersten Blick ziemlich umständlich wirken. Hat aber zwei riesen Vorteile:
1. Du kannst jederzeit mit FComputerState(ListBox1.Items.Objects[Index]) zugreifen. In dem DrawItem-Event der TListBox könnte es dann so aussehen
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  If TComputerState(TListBox(Control).Items.Objects[Index]).Online then
    begin
    // mach hier irgendwas
    end;
end;
2. Du bist unabhängig von der Oberfläche z.B. von der Komponente die die Information anzeigt !!!!!!!!
Dadurch könntest Du locker die TListBox durch eine TListView erstzen.
Wenn Du eine TListBox verwendest um die Daten zu halten (oben ist es die Aufgabe von TComputerStates) hättest Du große Probleme eine andere Komponente zu Visualisierung zu verwenden.
Jetzt rufst Du evt. in einem Timer-Event lediglich
Delphi-Quellcode:
FComputerStates.Ping;
ListBox.Refresh
auf.
  Mit Zitat antworten Zitat
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Schriftfarbe einer Zeile in der Listbox ändern?

  Alt 21. Sep 2003, 20:52
Hi Jens.
Auf jeden Fall schonmal DANKE
Das klingt jetzt richtig kompliziert , aber ich versuchs mal.
Kannst du dein Programm vielleicht online stellen?

Gruß
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#16

Re: Schriftfarbe einer Zeile in der Listbox ändern?

  Alt 22. Sep 2003, 13:58
Hallo Chris,
ich habe kein Programm.
Den Text habe ich "on the fly" geschrieben
  Mit Zitat antworten Zitat
Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: Schriftfarbe einer Zeile in der Listbox ändern?

  Alt 22. Sep 2003, 15:09
Ui, auch das noch. Respekt Nochmal Danke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz