![]() |
2spaltige Combobox
Kennt jemand von euch ne ComboBox, in der man 2spaltige Einträge anzeigen lassen kann? Wie bei der ListView-Kompo.
|
Re: 2spaltige Combobox
Guten Morgen!
Verwende OwnerDraw und nutze das Event OnDrawItem zu zeichnen und die Liste der Combobox hat genau soviele Spalten wie Du es möchtest. Gruss OLLI |
Re: 2spaltige Combobox
Sorry, aber ich versteh irgendwie überhaupt nicht was du meinst :wiejetzt:
|
Re: 2spaltige Combobox
Combobox anklicken.
Im Objektinspektor nach der Eigenschaft "Style ausschau halten. Dort "csOwnerDrawFixed" einstellen. Auf die Registerseite Ereignisse wechseln Doppelklick auf das Ereignis "OnDrawItem" ausführen. Dort muss jetzt der Code hin, der die Einträge der Liste Deiner Combobox zeichnet. Für die Listbox gibt es zu dieser Thematik ein Beispiel in der OH. Gruss OLLI |
Re: 2spaltige Combobox
Ahhh.Danke
|
Re: 2spaltige Combobox
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Genaral2003,
ich hab' das zwar nicht mir einer ComboBox gemacht, sondern mit einer ListBox, dürfte aber wohl so ähnlich funktionieren.
Code:
Das Ergebnis, zweispaltige Liste Ort | Plz, habe ich als Bild hinterlegt.
{ lbxOrt.Style muß auf lbOwnerDrawFixed gesetzt sein für eigene Auswahlliste
Ergebnis: 2-spaltige Tabelle (mehr ist möglich} procedure TFKasse.lbxOrtDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); const mx = 2; // = Anzahl der Spalten arrWidth : array[0..mx] of integer = (0,120,150); var strVal, strAll : string; i, pos1 : integer; rc : TRect; begin lbxOrt.Canvas.Brush.Style := bsSolid; lbxOrt.Canvas.FillRect(Rect); // nur zur Sicherheit: arrWidth[mx] := lbxOrt.Width; // oben und unten bleiben unverändert rc.Top := Rect.Top; rc.Bottom := Rect.Bottom; { Die einzelnen Spalten müssen durch ';' getrennt sein } strAll := lbxOrt.Items[Index]; // z.B.: "Ortename;12345" for i := 0 to High(arrWidth) - 1 do begin { Zeichenbereich für erste Spalte } rc.Left := Rect.Left + arrWidth[i] + 2; rc.Right := Rect.Left + arrWidth[i+1] - 2; { Text für erste Spalte ausfiltern } pos1 := Pos(';', strAll); if pos1 > 0 then strVal := Copy(strAll, 1, pos1 - 1) else strVal := strAll; { Text ausgeben } lbxOrt.Canvas.TextRect(rc, rc.Left, rc.Top, strVal); { Trennlinie zwischen Spalten zeichnen } lbxOrt.Canvas.MoveTo(rc.Right, rc.Top); lbxOrt.Canvas.LineTo(rc.Right, rc.Bottom); { Text für nächste Spalte ausfiltern } strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1); end; end; mfg eddy |
Re: 2spaltige Combobox
Ich versteh nicht ganz wieso du der Constante arrWidth
Delphi-Quellcode:
hier nen Wert zuweisen willst:
const
mx = 2; // = Anzahl der Spalten arrWidth : array[0..mx] of integer = (0,120,150);
Delphi-Quellcode:
Dachte immer Konstanten heißen Konstanten weil sie konstant sind und sich nicht ändern lassen :wiejetzt:
arrWidth[mx] := lbxOrt.Width;
Der sagt:
Code:
[Fehler] Unit1.pas(42): Der linken Seite kann nichts zugewiesen werden
|
Re: 2spaltige Combobox
Sieh mal bei der Compilerdirektive {$J} nach...
|
Re: 2spaltige Combobox
Den Begriff Compiler-Direktiven hab ich bis jetzt noch nie gehört. Hab mir mal die Hilfe durchgelesen, aber über {$J} im allgemeinen nichts gefunden, und weiß auch nicht wie ich da nachgucken soll
|
Re: 2spaltige Combobox
@General2003
In der OH in "Hilfethemen" auf dem Reiter "Index" den gewünschten Schalter eingeben, also $J :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz