Einzelnen Beitrag anzeigen

Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Ping ausführen und bei Erfolg Farbe ändern

  Alt 22. Mär 2005, 19:00
Hallo,

da ich das mit den Labels nicht verstehe, poste ich Dir eine Version, die die Einträge in der Listbox einfärbt.

Im Objektinspektor stellst Du die Eigenschaft [b]Style[b] der ListBox auf lbOwnerDrawFixed.
Delphi-Quellcode:
procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
var sText, sTime: string;
begin
  if (IdIcmpClient1.ReplyStatus.MsRoundTripTime = 0) then sTime:='<1else sTime:='=';
  sText:=Format('%d Byte von %s: icmp_seq=%d ttl=%d Zeit%s%dms',
                [IdIcmpClient1.ReplyStatus.BytesReceived, IdIcmpClient1.ReplyStatus.FromIpAddress,
                   IdIcmpClient1.ReplyStatus.SequenceId, IdIcmpClient1.ReplyStatus.TimeToLive,
                   sTime, IdIcmpClient1.ReplyStatus.MsRoundTripTime])+#9;
  // wenn mehr als 0 Byte empfangen wurden, dann gibt es eine Verbindung
  // diese Info wird durch Tab getrennt am Ende des Listboxeintrages
  // durch 1 und 0 repräsentiert.
  if (IdIcmpClient1.ReplyStatus.BytesReceived>0) then sText:=sText+'1'
    else sText:=sText+'0';
  Listbox1.Items.Add(sText);
end;


procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
  //IdIcmpClient1.OnReply := IdIcmpClient1Reply;
  Button1.Enabled := False;
  try
    IdIcmpClient1.Host := Edit1.Text;
    for i := 1 to 4 do
    begin
      IdIcmpClient1.Ping;
      Application.ProcessMessages;
    end;
  finally
    Button1.Enabled := True;
  end;
end;


procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var s1, s2:String;
    x :Integer;
begin
  with TListBox(Control) do
  begin
    // Position des Tab-Ziechens im aktuell anzuzeigenden Eintrag
    x:=System.Pos(#9, Items[Index]);
    // Listboxtext
    s1:=System.Copy(Items[Index], 1, x-1);
    
    // Status
    s2:=System.Copy(Items[Index], x+1, 1);
    if (s2='1') then Canvas.Font.Color:=clGreen
      else Canvas.Font.Color:=clRed;
    if (odSelected in State) then Canvas.Font.Color:=clWhite;
    Canvas.TextRect(Rect, Rect.Left+1, Rect.Top+1, s1);
  end; // wiht
end;
  Mit Zitat antworten Zitat