AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi LISTBOX: Immer die ersten 10 Zeichen eines eintrags färben?!
Thema durchsuchen
Ansicht
Themen-Optionen

LISTBOX: Immer die ersten 10 Zeichen eines eintrags färben?!

Ein Thema von benniwm · begonnen am 7. Mai 2005 · letzter Beitrag vom 8. Mai 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von benniwm
benniwm

Registriert seit: 2. Nov 2003
Ort: Monheim/Bayern
14 Beiträge
 
Delphi 7 Enterprise
 
#1

LISTBOX: Immer die ersten 10 Zeichen eines eintrags färben?!

  Alt 7. Mai 2005, 16:21
hui,
ich hab nen chat gemacht und möchte die uhrzeit durch eine andere schriftart hervorheben!
für jede nachricht wird ein neues item in ner listbox angelegt...
das sieht wie folg aus:
[01:30:25]Benutzer: Hallo

kann ich die ersten 10 zeichen also die uhrzeit in ner anderen schriftfarben machen?
thx

[edit=sakura] [Klammern ersetzt] Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 7. Mai 2005, 16:23
Hallo

Selberzeichnen im ondrawitem. Du kannst den string teilen und den ersten Teil mit fabre xy zeichnen, mit canvas.textwidth die notwendige Länge bestimmen und ab dort den zweiten Teil in Farbe Z zeichnen.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 7. Mai 2005, 16:25
Entweder:

1, Ownerdraw verwenden um jeden Eintrag selbst zu zeichnen
2, Verwendung von ListView mit 2 Spalten (wieß jedoch nicht ob die Stand-ListView unterschiedliche Einstellungen für jede Spalte unterstützt
3, Verwndung von Controls die eine HTML-Formatierung des Textes unterstützen würden (z.B. die HTML-ListBox vom ElPack
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von benniwm
benniwm

Registriert seit: 2. Nov 2003
Ort: Monheim/Bayern
14 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 7. Mai 2005, 16:29
hi
thx für die antworten...
ich hab noch wenig erfahrung drum probier ich jetz mal die lösung mit der komponente von ElPack!
das andere müsstet ihr mir genauer erklären...
thx
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 7. Mai 2005, 16:36
als Anregung:

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
Var Textbreite:integer;
    s:string;
begin
  //style der listbox auf ownerdrawfixed stellen!
  with control as TListBox do
    begin
      //Hintergrund
      canvas.FillRect(rect);
      //ersten Teil des strings
      s:=copy(items[index],1,10);
      canvas.font.Color:=clred;
      canvas.Font.Style:=[fsbold];
      canvas.TextOut(rect.Left+2,rect.top+2,s);
      Textbreite:=canvas.TextWidth(s);
      //zweiter Teil des strings
      s:=copy(items[index],10,length(items[index]));
      canvas.font.Color:=clWindowText;
      canvas.Font.Style:=[];
      canvas.TextOut(rect.Left+2+Textbreite,rect.top+2,s);
    end;
end;

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von benniwm
benniwm

Registriert seit: 2. Nov 2003
Ort: Monheim/Bayern
14 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 8. Mai 2005, 07:47
morgn!
ich habs jetzt so wie ichs bräuchte:
Delphi-Quellcode:
//Hintergrund
      canvas.FillRect(rect);
      //ersten Teil des strings (timestamp)
      s:=copy(items[index],0,10);
      canvas.font.Color:=$00E47B07;
      canvas.Font.Style:=[];
      canvas.TextOut(rect.Left+2,rect.top+2,s);
      Textbreite:=canvas.TextWidth(s);
      //zweiter Teil des strings (nick)
      s2:=copy(items[index],11,10);
      canvas.font.Color:=$00F6AD5B;
      canvas.Font.Style:=[];
      Textbreite:=canvas.TextWidth(s);
      canvas.TextOut(rect.Left+2+Textbreite,rect.top+2,s2);
      //dritter Teil des strings (:)
      s3:=copy(items[index],0,21);
      s3:=s3[21];
      canvas.font.Color:=$00FCD9B1;
      canvas.Font.Style:=[];
      Textbreite:=canvas.TextWidth(s+s2);
      canvas.TextOut(rect.Left+2+Textbreite,rect.top+2,s3);
     //vierter Teil des strings (text)
      s4:=copy(items[index],22,length(items[index]));
      canvas.font.Color:=$00D0D0D0;
      canvas.Font.Style:=[];
      Textbreite:=canvas.TextWidth(s+s2+s3);
      canvas.TextOut(rect.Left+2+Textbreite,rect.top+2,s4);
nur hab ich das jetzt mehr oder weniger durch ausprobieren hinbekommen!
könnte mir jemand erklären wie ich es machen kann, dass der 2.teil des strings in einer variablen länge sein kann(so lang wie der text in einem edit!), und eine bestimmte farbe hat und der rest dann wieder ne andere farbe:

[08:44:25]Name:TESTETSTETS

thX!!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 8. Mai 2005, 08:11
Hai benniwm,

ich würde das ganze mit einem TListView machen. Das ist dann etwas einfacher finde ich.
Im Anhang mal ein kleines Beispiel:
Angehängte Dateien
Dateityp: zip demo1_713.zip (8,5 KB, 26x aufgerufen)
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 8. Mai 2005, 08:24
du hast gesagt die ersten 10 Zeichen und nicht so viele unterschiedliche Farben Bei soviel wäre eine Listview vielleicht wirklich besser, allerdings erhäslt du dann immer ein Tabellenform der Ausgabe.
Zitat von benniwm:
nur hab ich das jetzt mehr oder weniger durch ausprobieren hinbekommen!
könnte mir jemand erklären wie ich es machen kann, dass der 2.teil des strings in einer variablen länge sein kann(so lang wie der text in einem edit!), und eine bestimmte farbe hat und der rest dann wieder ne andere farbe:
Du suchst pos, damit kannst diu ermittlen, wo der : im string ist.
zu deinem Code noch ein paar Anmerkungen:
Den font.style brauchst du nicht zusetzen.

Code:
s3:=s3[21];
wird dir Probleme bereiten, wenn der String nicht 21 Zeichen hat, solltest du abfragen!

Code:
Textbreite:=canvas.TextWidth(s+s2);
besser wäre
Textbreite:=Textbreite+canvas.TextWidth(s2); Du wirst da jetzt keinen Unterschied bemerken, wenn du jedoch unterschiedliche Schriften, größen, font.styles ... einsetzt, wirst du mit deiner Variante Probleme bekommen, da bei dir die Textbreite nur mit einer Einstellung ermittelt wird.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von benniwm
benniwm

Registriert seit: 2. Nov 2003
Ort: Monheim/Bayern
14 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 8. Mai 2005, 09:41
danke für die antworten nur habe ich jetzt dass näxte problem:
ich bekomme ne string geschickt und zwar so:
Delphi-Quellcode:
procedure read.Execute;
var
instr:string;
begin
while
form1.client.Connected
do
begin
instr := form1.client.Socket.ReadLn;
form1.listbox1.items.Add(instr);
form1.listbox1.Selected[form1.listbox1.Items.Count-1] := true;
end;
end;
diese procedure ist in einer extra unit drin...
drum müsste ich jetzt wahrscheinlich den erhaltenen string aufspalten und dann in das listview einfügen.oder?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#10

Re: [LISTBOX]Immer die ersten 10 Zeichen eines eintrags färb

  Alt 8. Mai 2005, 09:46
Auch wenn es sich ein bisschen hart anhört:

Nimm statt einer ListBox lieber ein RichEdit. (Register Win32) damit kannst du dann auch mehrzeilige Botschaften darstellen, und rumfärben, wie du willst.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 07:17 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