Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - zwei listbox fragen


patrick dee - Do 30.01.03 13:27
Titel: zwei listbox fragen
hi

ich habe zwei fragen zur listbox :

1 ) kann man eine zeile farblich zeigen, ohne draw item zu benutzen ?
beispiel :
kommt in der listbox das wort MERKE vor so soll diese zeile imme gelb sein oder kommt der eintrag 00:00:00 vor, soll diese zeile immer rot sein.

ich kann das draw item nicht verwenden da sonst meine tabulatoren nicht mehr richtig angezeigt werden.

2) Wei stelle ich es an das wenn ich die listbox inhalte lade und in der liste das wort Kontakt vorkommt dieses gelöscht wird ???

danke für eure hilfe

patrick


Delete - Do 30.01.03 14:10

zu 1.) Nein.

zu 2.)

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  i : Integer;
  s : String;
begin
  for i := Listbox1.Items.Count downto 0 do
  begin
    s :=  Listbox1.Items.Strings[Listbox1.ItemIndex]
    if s := 'Kontakt' then
      Listbox1.Items.Delete(i);
  end;


PS: Das nächste mal kannst du ruhig etwas mehr Mühe verwenden beim Erstellen eines Beitrages. Deiner enthielt so viele Fehler (Grammatik und Rechtschreibung), dass er fast unleserlich ist. :roll: Du erwartest von uns doch auch, dass wir dir eine verständliche Antworte geben, also dürfte es wohl nicht zu viel verlangt sein, das selbe auch von dir zu erwarten. :wink:


Teutobod - Do 30.01.03 14:28


Quelltext
1:
if s := 'Kontakt' then                    


sollte in
 if s = 'Kontakt' then
geändert werden


patrick dee - Do 30.01.03 14:31

sorry, habe da etwas geschludert - tut mir leid :oops:

musste aber weg vom pc da daddy ran wollte.
danke trotzdem für die hilfe.

blöd das mit dem einfärben. wenn ich nun doch das drawitem verwende, wie krige ich das mit den tabulatoren hin ? habe eine liste und wenn ich enter drücke wird ein eintrag aus der liste in eine edit geladen und am rechten rand erscheint dann die uhrzeit. hat da jemand ein brauchbares rezept für mich ?
wäre ja möglich
danke

patrick :wink:


Delete - Do 30.01.03 14:34

Teutobod hat folgendes geschrieben:

Quelltext
1:
if s := 'Kontakt' then                    


sollte in
 if s = 'Kontakt' then
geändert werden


Hmpf. Da hat irgendwer den Forums-Debugger abgeschaltet. :wink:

Wie wäre es mit einem Listview? Da kannst du Spalten nehmen zum Darstellen der Werte.


smiegel - Do 30.01.03 14:42

Hallo,

schau Dir einmal die Funtion DrawText der WinApi an.

Eine Möglichkeit mit DrawText das zu realisieren könnte folgendermaßen aussehen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.ListBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var x:Integer;
      s:String;
begin
  with TListBox(Control), Canvas do
  begin
    if (System.Pos('MERKE', Items[Index])>0) then Brush.Color:=clYellow
      else if (System.Pos('00:00:00', Items[Index])>0) then Brush.Color:=clRed
        else Brush.Color:=clWhite;
    x:=System.Pos(#9, Items[Index]);
    if (x>0) then
    begin
      s:=System.Copy(Items[Index], 1, x-1); 
      TextRect(Rect, Rect.Left,  Rect.Top, s);
      s:=System.Copy(Items[Index], x+1, 255); 
      TextOut(Rect.Top, Rect.Right-TextWidth(s)-5, s); 
    end else TextRect(Rect, Rect.Left,  Rect.Top, Items[Index]);
  end; // with
end;


patrick dee - Do 30.01.03 14:45

jo listview den tip hatte ich schon mal aber da blicke gar nicht durch.
meine listen sind text files werden geladen über das tages datum.

das mit listview ging nicht bei mir da ich ja immer diesen glaube ich delimiter brauche 'I' damit listview weiss von wo bis wohin der eintrag pro
zeile geht bzw zelle. da die listen fertig sind kann ich die nun nicht mehr ändern.

patrick


patrick dee - Do 30.01.03 14:46

danke smiegel

das werde ich mal versuchen ... :lol:


patrick dee - Do 30.01.03 16:39

:cry:

also ein wort löschen aus der liste wie oben genannt KONTAKT geht bei so nicht. nun ein bischen code von mir. so lade ich die listen


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TfMain.btnLadeListeClick(Sender: TObject);
var
  datum, s : string;
         i : integer;
begin
  datum:= FormatDateTime('dd-mm-yy',NOW);

  with Playliste do
  begin
    BeginUpdate;
    Clear;
    LoadFromFile( Tools_Form.Edit1.text + datum + '.ld1' );
    EndUpdate;
  end;
   Stunde_Form.Show;
     PRGPanel.Caption := ' P 1 ';
    If ListBox1.ItemIndex = -1 then exit;
 end;



so wähle ich in einer combobox die stunde aus :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
procedure TfMain.ComboBox1Change(Sender: TObject);
var
  Found : boolean;
      i : integer;
      s : string;
begin
  Found := False;
  if( ComboBox1.Text = '24 Uhr' )then
  begin
    with ListBox1.Items do
    begin
      BeginUpdate;
      Clear;
      for i := 0 to Playliste.Count - 1 do
        Add( Playliste.Strings[ i ]);
      EndUpdate;
    end;
    Abort;
  end;
  i := 0;
  with ListBox1.Items do
  begin
    BeginUpdate;
    Clear;
    while not Found and( i < Playliste.Count )do
    begin
      if( Pos( ComboBox1.Text, Playliste.Strings[ i ]) > 0 )then
      begin
        Inc( i );
        while not( Pos( ' Uhr', Playliste.Strings[ i ]) > 0 )do
        begin
          Add( Playliste.Strings[ i ]);
          Inc( i );
        end;
        Found := True;
      end
      else
        Inc( i );
    end;
    inc (i);
    ListBox1.ItemIndex := 3;  //Position in der Liste 3 Stelle
   EndUpdate;
  end;
end; // ComboBox1Change


und wenn ich die liste lade sollten die zeilen die mit Kontakt,Bereich,Weiteres gelöscht erden.

ich hoffe das ihr mir helfen könnt

gruß

patrick


smiegel - Do 30.01.03 17:37

Hallo,


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
const
  zumLoeschen:array[0..2] of String=('Kontakt', 'Bereich', 'Weiteres');

procedure TfMain.btnLadeListeClick(Sender: TObject); 
var 
  datum, s : string; 
         i, j : integer; 
begin 
  datum:= FormatDateTime('dd-mm-yy',NOW); 

  with Playliste do 
  begin 
    BeginUpdate; 
    Clear; 
    LoadFromFile( Tools_Form.Edit1.text + datum + '.ld1' ); 
    // ab hier, die überflüssigen Einträge löschen:
    for i:=Count-1 downto 0 do
    begin
      for j:=0 to 2 do if (System.Pos(zumLoeschen[j], Strings[i])>0) then
      begin
        Delete(i);
        Break;
      end; // for j
    end; // for i
    // ----
    EndUpdate; 
  end; 
   Stunde_Form.Show; 
     PRGPanel.Caption := ' P 1 '; 
    If ListBox1.ItemIndex = -1 then exit; 
end;