Listbox mehrspaltig

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Cool-Tuc
Beiträge: 100
Registriert: Mi 6. Apr 2011, 17:10

Listbox mehrspaltig

Beitrag von Cool-Tuc »

Hallo alle,

ich kann zwar in der TListBox die Eigenschaft "columns" setzen, aber ich habe keine Möglichkeit gefunden, diese Spalten auch zu beschreiben, evtl. auch die einezelnen Werte in einer Spalte zu verändern...

Für Hilfe bin ich Dankbar

udo

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Listbox mehrspaltig

Beitrag von wp_xyz »

Nein - eine mehrspaltige TListbox ist kein TStringGrid. Du gibst genauso wie bei einer normalen, einspaltigen Listbox die Werte in eine lineare, 1-dimensionale Stringliste ein. Die Listbox füllt zunächst die 1. Spalte in Höhe der Listbox auf, dann die zweite. Falls dann noch Werte übrig sind, werden weitere Spalten angehängt. Die Zahl, die man bei Columns einträgt, bestimmt nur den Abstand zwischen den Spalten - d.h. bei Columns = 2 finden zwei Spalten nebeneinander Platz ohne dass der horizontale Scrollbalken erscheint, bei Columns=3 entsprechend 3. Wenn sich mit dem Fenster z.B. die Listbox-Höhe verändert, werden die Werte entsprechend neu eingruppiert. Die mehrspaltige Listbox verhindert also den vertikalen Scrollbar und verwendet stattdessen bei Bedarf einen horizontalen. Du kannst bei einer mehrspaltigen Listbox also kaum vorhersagen, welcher Wert z.B. in der 2. Spalte und 4. Zeile landet...

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Listbox mehrspaltig

Beitrag von Mathias »

Unter Delphi gibt es so was, aber unter Lazarus scheint es nicht zu funktionieren.

http://docwiki.embarcadero.com/Librarie ... tBox.Items
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Listbox mehrspaltig

Beitrag von Frank Ranis »

Hallo Udo,

habe im SwissDelphiCenter ein paar Code-Brocken gefunden, die im Laz auch funzen.

Aber:
1) TListbox geht nicht , sondern nur TMemo.
2) Man muß Windows unter Uses einbinden , wegen Sendmessage.

Bau dir auf eine leer Form einen Button und ein breites Memo .
Hier noch der Code .

Gruss Frank

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  windows;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
const
  // Die Anzahl der maximal aufretenen Tabs eintragen
  MAX_TABS = 4;
  Tab = #9;
var
  Tabulators: array[0..MAX_TABS] of Integer;
begin
// Tabstops
 Tabulators[0] := 110;
 Tabulators[1] := 160;
 Tabulators[2] := 250;
 Tabulators[3] := 350;
// Tabulatoren setzen
 SendMessage(memo1.Handle, EM_SETTABSTOPS, MAX_TABS, Longint(@Tabulators));
// Items hinzufügen
 memo1.Clear;
 memo1.lines.Add('AAAAAAAAAA ' + Tab + 'BBBBBBB' + Tab + '1234-56' + Tab + 'CCCCCCCC');
 memo1.lines.Add('EEEEEEEEEEEEEEEEEEE' + Tab + 'FFFFFFFFFF' + Tab + '68974787878787');
 memo1.lines.Add('GGGGGG' + Tab + 'HHHHHHH' + Tab + '98754-654');
end;
 
 
end.
www.flz-vortex.de

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Listbox mehrspaltig

Beitrag von Epcop »

Du suchst wahrscheinlich TListView. Das kann mehrspaltig. Bei TListview muss man sich aber etwas einlesen.

LG

braunbär
Beiträge: 369
Registriert: Do 8. Jun 2017, 18:21
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: 64Bit
Wohnort: Wien

Re: Listbox mehrspaltig

Beitrag von braunbär »

Frank Ranis hat geschrieben:
Di 15. Mär 2016, 15:32
habe im SwissDelphiCenter ein paar Code-Brocken gefunden, die im Laz auch funzen.
Das angegebene Beispiel funktioniert - Für alle, die danach suchen, zwei Bemerkungen:

Code: Alles auswählen

Tabulators: array[0..MAX_TABS] of Integer; 
müsste richtig

Code: Alles auswählen

Tabulators: array[0..MAX_TABS-1] of Integer;
sein, oder man müsste dem sendmessage maxtabs+1 übergeben, sonst wird das letzte Element des Arrays ignoriert.

Was mir völlig rätselhaft ist, Sendmessage stürzt mit einem SIGSEV Fehler ab, wenn man Tabulators statt als Variable als typed Constant definiert und schon zur Compilezeit initialisiert. Warum das der Fall ist, verstehe ich nicht - werden denn typed constants von Free Pascal nicht genauso wie Variable im Speicher abgelegt?

Antworten