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/)
-   -   Bei ComboBox Text-Aktualisierung bei Auswahl abfangen (https://www.delphipraxis.net/167142-bei-combobox-text-aktualisierung-bei-auswahl-abfangen.html)

Popov 15. Mär 2012 07:09

Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Ist wahrscheinlich nur eine Kleinigkeit. Und zwar will ich in der ComboBox einen Eintrag auswählen, der ist aber letztendlich nur ein Alias für einen anderen Text. Wähle ich in der Liste zB. Apfel, soll ins Text-Feld Obst.

Das Ersetzen selbst ist in kein Problem, zuletzt aber wird das Feld Text dann doch noch von dem Item-String überschrieben.

Billa 15. Mär 2012 07:16

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Hallo, ich bin nicht sicher, ob ich Dein Anliegen richtig verstanden habe:
Du wählst mit Hilfe einer Combobox einen Eintrag und in ein anderes Textfeld soll z.B. die zugehörige Kategorie?
Oder ist die Kategorie ebenfalls in der Liste enthalten? Dann hilft ja vielleicht die Eigenschaft ".ItemIndex" weiter...
Aber offen gestanden fühlt sich das irgendwie falsch an. Wenn ich als Anwender etwas auswähle, erwarte ich nicht, dass danach etwas anderes dort steht. So etwas würde ich - falls notwendig - immer mit zwei Elementen machen. Eben die Liste der Elemente und ein Feld für die zugehörige Kategorie.

Popov 15. Mär 2012 13:06

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Zitat:

Zitat von Billa (Beitrag 1156658)
Aber offen gestanden fühlt sich das irgendwie falsch an. Wenn ich als Anwender etwas auswähle, erwarte ich nicht, dass danach etwas anderes dort steht.

Oh je, jetzt kommt die Anwenderpsychologie ins Spiel. Wenn ich bei Windows auf den Starbutton klicke, erwarte ich nicht, dass ich damit Windows XP beenden kann? Hast Recht. Trotzdem hat es seine Richtigkeit.

Gut, ich liefere ein besseres (konstruiertes) Beispiel, vielleicht erkennt man dann den Sinn. Ich habe Edit-Komponente in die der Anwender ein Pfad eingeben kann. Soweit so gut. Jetzt bringe ich etwas Komfort ins Spiel und ersetzte die Edit-Komponente durch eine ComboBox, die hat auch ein Text-Feld. Jetzt kann der Anwender aber die Box aufklappen und da stehen Begriffe wie Desktop, Eigene Dateien, Eigene Bilder, usw. Wählt der Anwender Eigene Bilder aus, bekommt er, so ist es zumindest geplant, den Pfad zu dem Eigene Bilder Ordner in das ComboBox-Textfeld geschrieben. Ich glaube die Verwirrung würde sich in Grenzen halten. Also nichts wildes, nur dem Anwender ein wenig Tiparbeit abnehmen.

Allerdings, das Ganze hat jetzt länger gedauert als ich mir das vorgestellte habe, so dass ich das Ganze wohl über eine Edit-Komponente und PopUpMenü löse.

Trotz dem, auch wenn es jetzt nur noch informativ ist, würde es mich dennoch interessieren wie sowas geht.

Satyr 15. Mär 2012 16:36

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Ins onChange sowas wie

Delphi-Quellcode:
if ComboBox.text = 'Apfel' then ComboBox.text := 'Obst';
?

Popov 15. Mär 2012 17:40

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Theoretisch ja. Ich hab das inzwischen über PopupMenü gelöst, somit ist es nicht mehr dringend. Interessant wäre es trotzdem zu wissen wie man es abfängt, denn in den jeweiligen Ereignissen habe ich es geändert, zuletzt wird es aber dennoch überschrieben.

Satyr 15. Mär 2012 17:54

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Ach Du willst das Item komplett austauschen, nicht nur den Anzeigetext solange es ausgewählt ist?

Billa 16. Mär 2012 06:11

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Gerade das Beispiel des Startbuttons zeigt, dass nicht jeden M... nachmachen sollte, nur um eventuell ein Bedienelement zu sparen. :wink: Ist nur eine ganz persönliche Haltung. Ein Kompromiss könnte sein, das Ergebnis der Auswahl schon mal beim Selektieren als Hint oder in der Statusleiste anzuzeigen.

Gollum 16. Mär 2012 07:03

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
@Popov:
Soll/darf der Benutzer den Text ändern oder ist der nur zur Anzeige gedacht?

Wenn es nur ums Anzeigen geht, dann mit einer OwnerDraw-Combobox;

Delphi-Quellcode:
...
ComboBox1.Items.Add('Apfel=Obst');
ComboBox1.Items.Add('Kirsche=Obst');
ComboBox1.Items.Add('Paprika=Gemüse');
...

procedure TForm1.ComboBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var combo:TComboBox;
    s   :String;
begin
  combo:=TComboBox(Control);
  if (odComboBoxEdit in State) then
    s:=combo.Items.ValueFromIndex[Index]
  else
    s:=combo.Items.Names[Index];
  combo.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top, s);
  //if (odSelected in State) then combo.Canvas.DrawFocusRect(Rect);
end;

Satyr 16. Mär 2012 11:09

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
Wenn die Anfangselemente static sind, weiß man doch meist den Index und kann das Element darüber einfach austausch im onChange?
Ich bin grade unterwegs und hab hier kein Delphi. Aber das müsste mit einer Zeile Code gehen...

himitsu 16. Mär 2012 11:32

AW: Bei ComboBox Text-Aktualisierung bei Auswahl abfangen
 
ComboBox1DrawItem?
Das würde ich als falschen Weg ansehn.

Der Anzeige-Text in die Items und dann entweder über ItemIndex den Wert bestimmen
oder über das Datenobjekt jedes Items ( cb.Objects[cb.ItemIndex] ) den internen Wert übergeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:18 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-2025 by Thomas Breitkreuz