AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ComboBox: Angeklickten Eintrag optional hinzufügen
Thema durchsuchen
Ansicht
Themen-Optionen

ComboBox: Angeklickten Eintrag optional hinzufügen

Ein Thema von PeterPanino · begonnen am 13. Sep 2008 · letzter Beitrag vom 15. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 13. Sep 2008, 23:38
Hallo, ich möchte eine ComboBox mit folgendem Verhalten:

Wenn beim Klick auf einen Eintrag der ComboBox-DropDown-Liste die Strg-Taste gehalten wird, so ersetzt der angeklickte Eintrag nicht einen im ComboBox-Feld bereits bestehenden Text, sondern wird zu diesem hinzugefügt (mit einem Leerzeichen dazwischen).

Dazu bräuchte ich das Ereignis, wenn auf die ComboBox-DropDown-Liste geklickt wird, das den geklickten Eintrag liefert - gibt es aber nicht. Oder ein Ereignis, das kurz vor dem Einfügen des angeklickten Eintrages auftritt.

Wer hat eine Idee? Vielen Dank im Voraus!
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 00:36
Folgender Ansatz funktioniert leider nicht - weiß jemand warum:

Delphi-Quellcode:
var
  OldComboText: string;

procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
  MessageDlg('OnCloseUp: ' + ComboBox1.Text, mtInformation, [mbOK], 0); // alter Text
  OldComboText := ComboBox1.Text;
end;

procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  MessageDlg('OnSelect: ' + ComboBox1.Text, mtInformation, [mbOK], 0); // neuer Text
  ComboBox1.Text := OldComboText + ' ' + ComboBox1.Text; // funktioniert nicht!!
end;
Außerdem wird erstaunlicherweise bei der Aktivierung dieser beiden Ereignisse das OnChange-Ereignis deaktiviert!!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 02:23
Ich habe ehrlich gesagt nicht ganz verstanden, was du eigentlich erreichen willst. Für eine Mehrfachauswahl ist eine Comobox nicht ausgelegt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 02:34
Zitat von Luckie:
Ich habe ehrlich gesagt nicht ganz verstanden, was du eigentlich erreichen willst. Für eine Mehrfachauswahl ist eine Comobox nicht ausgelegt.
Ich habe es verstanden und habe auch versucht, das Problem zu lösen. Irgendwo in den Tiefen der VCL habe ich dann aufgegeben. Eine TComboBox ist nicht ohne tiefere Eingriffe dafür geeignet.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 02:38
Na da wird sich der Benutzer aber wundern. Also eine Mehrfachauswahl bei einer Combobox ist nicht sehr benutzer freundlich.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 03:48
Zitat von Luckie:
Na da wird sich der Benutzer aber wundern. Also eine Mehrfachauswahl bei einer Combobox ist nicht sehr benutzer freundlich.
Es geht nicht um eine Mehrfachauswahl, sondern darum, dem Text im ComboBox-Feld den ausgewählten Eintrag hinzuzufügen. (ComboBox.Style ist csDropDown und nicht csDropDownList).
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 09:03
Das ist aber nicht vorgesehen, da musst du dir eine eigene Komponente basteln
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 09:29
Hallo,

Die Schwierigkeit ist, dass im OnCloseUp Ereignis der ComboBox Text nicht verändert werden kann,
da sobald OnCloseUp abgearbeitet wurde, der Text gesetzt wird.
Mit einem kleinen Trick lässt sich dies umgehen.

Es wird eine benutzerdefinierte Nachricht (WM_AFTERCBCLOSEUP) nach dem OnCloseUp per PostMessage der Combobox geschickt.
Übergeben wird der alte Text der ComboBox und eine Referenz auf die Combobox.

Das könnte dann etwa so aussehen:

Delphi-Quellcode:
const
  WM_AFTERCBCLOSEUP = WM_USER + 123;
type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure ComboBox1CloseUp(Sender: TObject);
  private
    { Private declarations }
    procedure WMAfterCBCloseUp(var Msg: TMessage); message WM_AFTERCBCLOSEUP;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function CtrlDown: Boolean;
var
  State: TKeyboardState;
begin
  GetKeyboardState(State);
  Result := ((State[VK_CONTROL] and 128) <> 0);
end;

procedure TForm1.ComboBox1CloseUp(Sender: TObject);
var
  p: PChar;
begin
  if CtrlDown then // falls Ctrl gedrückt
  begin
    P := StrAlloc(Length((Sender as TComboBox).Text)+1);
    StrCopy(P, PChar((Sender as TComboBox).Text));
    PostMessage(Handle, WM_AFTERCBCLOSEUP, Integer(P), Integer(Sender));
  end;
end;

procedure TForm1.WMAfterCBCloseUp(var Msg: TMessage);
var
  s : string;
  p : PChar;
begin
  P := PChar(Msg.WParam);
  s := string(P);
  StrDispose(P);
  with TComboBox(Msg.LParam) do
    Text := s + ',' + Items[ItemIndex];
end;
Thomas
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 13:42
Hallo toms,

GENIAL - VIELEN DANK !!!!!!

In diese Message-Tricksereien muss ich mich noch einarbeiten ...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: ComboBox: Angeklickten Eintrag optional hinzufügen

  Alt 14. Sep 2008, 13:49
Goil
Immer schön -NICHT- Windows-konform programmieren, damit wir auch garantiert lange Einarbeitungszeiten und überflüssige "Bei Programm XYZ geht das aber, wieso nicht hier?" oder ständige "Wie ging denn das nochmal mit der Mehrfachauswahl" Kundenanfragen bekommen. Dammich!

Verwende eine Checklistbox. Dann ist für den Anwender eindeutig klar, was zu tun ist. Und Windows-konform ist es auch.

Leute, ihr sollt keine Ctrl-Shift-Alt-Hinter-dem-Rücken-Gekreuzt-außer-Dienstags-Sonderfunktionen implementieren, sondern klare einfach zu verstehende Dialoge, die man ohne Nachfragen bedienen kann.

Obwohl die Lösung schon mal echt nett ist. @toms:
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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