Delphi-PRAXiS

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 ComboBoxItem auswählen ohne den ComboBox.Text zu verändern (https://www.delphipraxis.net/198483-comboboxitem-auswaehlen-ohne-den-combobox-text-zu-veraendern.html)

Hobbycoder 6. Nov 2018 18:34

ComboBoxItem auswählen ohne den ComboBox.Text zu verändern
 
Hi,

ich möchte gern folgendes realisieren:

Gegeben ist eine Combobox, in der der User wie in einem Edit Daten eingeben kann. Über das Pulldown soll er dann verschiedene Zustände auswählen können. Diese werden dann über Symbole, die im Editbereich der Combobox zeichnet werden, dargestellt. Der eigentliche Combobox.Text-Inhalt soll dabei aber nicht verändert werden.

Bisher hatte ich das mit einem stinknormalen Edit, einem Speedbutton und einem Popupmenu gelöst. Bei dem Projekt würde ich das gerne über eine Combobox allein lösen.

Ich habe das einfach mal so versucht:
Delphi-Quellcode:
procedure TTest.cbbTestChange(Sender: TObject);
begin
  // cbbText.ItemIndex:=-1; //bringt nichts
  cbbTest.Text:=FTempValue;
end;

procedure TTest.cbbTestDropDown(Sender: TObject);
begin
  FTempValue:=cbbTest.Text;
end;
Dann habe ich zwar im OnChange-Event in FTempValue den ursprünglichen Text stehen, aber nach der Zuweisung setzt die CompboBox trotzdem den ItemIndex.

Hat jemand eine Idee, wie ich das lösen könnte?

ghubi01 6. Nov 2018 20:10

AW: ComboBoxItem auswählen ohne den ComboBox.Text zu verändern
 
Hallo,

vielleicht hilft Dir folgender Code weiter:
Delphi-Quellcode:
const
  WM_MYEVENT = WM_USER + 1;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure ComboBox1DropDown(Sender: TObject);
    procedure ComboBox1CloseUp(Sender: TObject);
  private
    { Private-Deklarationen }
    FCombo: string;
    procedure MyEvent(var Msg: TMessage); Message WM_MYEVENT;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
  ComboBox1.ItemIndex:=-1;
  PostMessage(Handle,WM_MYEVENT,0,0);
end;

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
  FCombo:=ComboBox1.Text;
end;

procedure TForm1.MyEvent(var Msg: TMessage);
begin
  ComboBox1.Text:=FCombo;
end;
Ist nicht gerade eine elegante Lösung, aber es funktioniert. :?

Hobbycoder 7. Nov 2018 16:21

AW: ComboBoxItem auswählen ohne den ComboBox.Text zu verändern
 
Danke. Ja, nicht schön, aber funktionell.
Alternative wäre mir eine spezielle, eigenen Komponente zu schreiben. Von daher gefällt mir die "schnelle" Lösung doch ganz gut. (Zumal ich's nur an einer Stelle benötige).

ghubi01 7. Nov 2018 17:41

AW: ComboBoxItem auswählen ohne den ComboBox.Text zu verändern
 
Hallo,

mir ist gerade eine unschöne Sache bei meinem Beispiel aufgefallen. :?

Wenn man in der gestarteten Anwendung mit dem Mauszeiger direkt auf das Editierfeld der Combobox geht und dann das
Scrollrad der Maus bewegt, werden die einzelnen Item-Einträge im Editierfeld angezeigt und der zuvor eingegebene Text ist futsch.

Da weis ich jetzt auch keine Lösung zu. :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr.

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