TComboBox, Items rechtsbüngig?

Rund um die LCL und andere Komponenten
Antworten
Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

TComboBox, Items rechtsbüngig?

Beitrag von Luckner »

Hallo,
suche eine Möglichkeitkeit in einigen TComboBoxen die Items rechtsbündig oder zentriert auszugeben. Ich denke, dass ich dafür die "OnDrawItem" dafür verwenden sollte. Unter Delphi hatte ich eine Routine, die funktioniert jedoch nicht im Lazarus. Kann mir Jemand da helfen?

Danke.

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: TComboBox, Items rechtsbüngig?

Beitrag von theo »

Grundsätzlich müsste es so gehen, wenn du Style auf csOwnerDrawFixed stellst.
Da kann man natürlich noch viel dran feilen.

Code: Alles auswählen

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
var ATS:TTextStyle;
  CB:TComboBox;
begin
  CB:=Control as TComboBox;
  CB.Canvas.FillRect(ARect);
  if Odd(Index) then
   ATS.Alignment:=taRightJustify else
   ATS.Alignment:=taCenter;
  CB.Canvas.TextRect(ARect,0,0,CB.Items[Index], ATS);
end;  

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TComboBox, Items rechtsbüngig?

Beitrag von Luckner »

Hallo Theo,
so in etwa hatte ich es auch in Delphi. Aber auch in Deinem Beispiel wirft der Compiler Fehler aus. Schon bei : var ATS:TTextStyle; heißt es Error: Identifier not found "TTextStyle".

Gruß, Luckner

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: TComboBox, Items rechtsbüngig?

Beitrag von theo »

Sehr merkwürdig.
Hast du etwa die unit "Graphics" nicht in der "uses"?
Die müsste bei einem neuen Projekt eigentlich dabei sein.

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TComboBox, Items rechtsbüngig?

Beitrag von Luckner »

Hallo Theo,
es stimmt, Graphics fehlte. Leider ist der Text immernoch linksbündig.

Gruß, Luckner

wennerer
Beiträge: 609
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: TComboBox, Items rechtsbüngig?

Beitrag von wennerer »

Hallo Luckner,
keine Ahnung ob das eine Musterlösung ist aber ich mach es so:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    ComboBox1 : TCombobox;
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      ARect: TRect; State: TOwnerDrawState);
  private


  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 ComboBox1        := TCombobox.Create(self);
 ComboBox1.Parent := self;
 ComboBox1.Left   := 20;
 ComboBox1.Top    := 20;
 ComboBox1.Style  := CsOwnerDrawFixed;
 ComboBox1.Items.Add('Apfel ');
 ComboBox1.Items.Add('Birne ');
 ComboBox1.Items.Add('Kiwi ');
 ComboBox1.Items.Add('Kirsche ');
 ComboBox1.Items.Add('Pflaume ');
 ComboBox1.Text   := ComboBox1.Items[0];
 ComboBox1.OnDrawItem:= @ComboBox1DrawItem;
end;

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
var aTS :TTextStyle;
    aCB :TComboBox;
begin
  aCB := Control as TComboBox;
  aTS.Alignment  := taRightJustify;
  aCB.Font.Color := clBlue;
  aCB.Canvas.TextRect(ARect,0,0,aCB.Items[Index], aTS);
end;

end.
Viele Grüße
Bernd
Dateianhänge
project1.zip
(105.6 KiB) 64-mal heruntergeladen

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TComboBox, Items rechtsbüngig?

Beitrag von Luckner »

Guten Morgen wennerer,

hatte Dein Beispiel übernommen und es hatte erst nicht funktioniert. Dann die Zip-Datei entpackt und Dein Projekt funktionierte. Also vergliche und siehe:
ComboBox1.Style := CsOwnerDrawFixed;

daran lag es . Jetzt geht es . Prima. Vielen Dank.

Gruß, Luckner

Benutzeravatar
theo
Beiträge: 10921
Registriert: Mo 11. Sep 2006, 19:01

Re: TComboBox, Items rechtsbüngig?

Beitrag von theo »

Luckner hat geschrieben: Sa 12. Nov 2022, 05:04 Also vergliche und siehe:
ComboBox1.Style := CsOwnerDrawFixed;

daran lag es . Jetzt geht es . Prima. Vielen Dank.
:roll:
Das stand im ersten Satz der ersten Antwort in diesem Thread.
Wer lesen kann... :wink:

Luckner
Beiträge: 88
Registriert: Sa 18. Jan 2020, 09:56
OS, Lazarus, FPC: Winux (L 2.2.0 FPC 3.2.2)
CPU-Target: Windows 64-Bit

Re: TComboBox, Items rechtsbüngig?

Beitrag von Luckner »

Stimmt. War nie meine Stärke. Danke.

Luckner

Antworten