Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi 2spaltige Combobox (https://www.delphipraxis.net/13315-2spaltige-combobox.html)

Nalincah 16. Dez 2003 08:08


2spaltige Combobox
 
Kennt jemand von euch ne ComboBox, in der man 2spaltige Einträge anzeigen lassen kann? Wie bei der ListView-Kompo.

OLLI_T 16. Dez 2003 10:12

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

Nalincah 16. Dez 2003 10:30

Re: 2spaltige Combobox
 
Sorry, aber ich versteh irgendwie überhaupt nicht was du meinst :wiejetzt:

OLLI_T 16. Dez 2003 10:38

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

Nalincah 16. Dez 2003 10:59

Re: 2spaltige Combobox
 
Ahhh.Danke

eddy 16. Dez 2003 12:57

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:
{ 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;
Das Ergebnis, zweispaltige Liste Ort | Plz, habe ich als Bild hinterlegt.

mfg
eddy

Nalincah 16. Dez 2003 13:05

Re: 2spaltige Combobox
 
Ich versteh nicht ganz wieso du der Constante arrWidth

Delphi-Quellcode:
const
  mx = 2; // = Anzahl der Spalten
  arrWidth : array[0..mx] of integer = (0,120,150);
hier nen Wert zuweisen willst:

Delphi-Quellcode:
arrWidth[mx] := lbxOrt.Width;
Dachte immer Konstanten heißen Konstanten weil sie konstant sind und sich nicht ändern lassen :wiejetzt:

Der sagt:

Code:
[Fehler] Unit1.pas(42): Der linken Seite kann nichts zugewiesen werden

choose 16. Dez 2003 13:09

Re: 2spaltige Combobox
 
Sieh mal bei der Compilerdirektive {$J} nach...

Nalincah 16. Dez 2003 13:19

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

s14 16. Dez 2003 13:26

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 01:17 Uhr.
Seite 1 von 2  1 2      

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