![]() |
Datenbank: Mysql • Version: 4.1 • Zugriff über: Mydac
DBLoockupbox möglichkeit kein Auswah zu treffen?
Hallo.
Wenn ich mit diese Komponente arbeite und ein Wert auswähle kann ich dann "KEIN WERT" nicht mehr auswählen. Kann man das irgendwie realisieren? Wichtig ist, das ich mit SOURCELIST arbeite. |
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Im OnKeyDown Event auf VK_DELETE prüfen und dann ItemIndex := -1 setzen.
|
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
...das ist richt. Der Benutzer arbeitet Mit Maus. Kann man das irgendwie mit mausrealisieren? ich möchte vermeiden, das ich einen DUMMY Datensatz anlege.
|
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Mit ItemIndex ginge es mit TDBLookupComboBox auch nicht, man müßte schon ein
dblCombo.Field.Clear absetzen (vorher auf dsEditModes prüfen). Mit der Maus bliebe 'auf die Schnelle', also ohne was eigenes zu stricken, wohl nur ein PopupMenu für die Box - oder der zu recht ungeliebte Dummy-Datensatz. peinhard |
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Zitat:
Delphi-Quellcode:
procedure Tfrm.cbMwstMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin if Button = mbRight then TabellenFeldname.Clear; // das ist das TField // oder auch // dblCombo.Field.Clear; end; |
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Gute Idee, das... Hier ein schnell gestrickter Abkömmling:
Delphi-Quellcode:
Bei Fehlern bitte nicht hauen... Verbesserungen gerne.
unit DBLookupComboBoxEx;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DB, DBCtrls; type TDBLookupComboBoxEx = class(TDBLookupComboBox) private FAllowClear: boolean; procedure ClearField; protected procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; public published property AllowClear: boolean read FAllowClear write FAllowClear default False; end; procedure Register; implementation procedure TDBLookupComboBoxEx.ClearField; begin if FAllowClear and CanModify then begin DataSource.Edit; Field.Clear; end; end; procedure TDBLookupComboBoxEx.KeyDown(var Key: Word; Shift: TShiftState); begin inherited KeyDown(Key, Shift); if (Key = VK_DELETE) then ClearField; end; procedure TDBLookupComboBoxEx.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbRight) then ClearField; inherited MouseDown(Button, Shift, X, Y); end; procedure Register; begin RegisterComponents('DBAddOns', [TDBLookupComboBoxEx]); end; end. Edit: Prozedur ClearField angepasst... peinhard |
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Also meine TDBLoopkupComboBoxen haben die Eigenschaft NullValueKey, die eigentlich genau das erledigt.
|
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Stimmt - aber erst ab D7 (oder D6? das hab ich übersprungen). Und eben auch nicht für die Maus, wobei dieses Verhalten zugegebenermaßen auch nicht besonders 'systemkonform' ist. Aber der Hinweis ist selbstverständlich mehr als berechtigt, im Sinne einer problemlosen Migration und auf die Tastatur beschränkt sähe das dann für D5 (bzw D6?) einschließlich so aus:
Delphi-Quellcode:
Außerdem habe ich mir erlaubt, die gestrige Variante auch noch mal anzupassen, die hat zB auch ReadOnly nicht berücksichtigt. Man sollte sowas halt nicht als Mittel gegen Schlaflosigkeit einsetzen...
unit DBLookupComboBoxEx;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, DB, DBCtrls; type TDBLookupComboBoxEx = class(TDBLookupComboBox) private FNullValueKey: TShortCut; protected procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN; public published property NullValueKey: TShortCut read FNullValueKey write FNullValueKey default 0; end; procedure Register; implementation procedure TDBLookupComboBoxEx.WMKeyDown(var Message: TWMKeyDown); begin if (FNullValueKey <> 0) and CanModify and (FNullValueKey = ShortCut(Message.CharCode, KeyDataToShiftState(Message.KeyData))) then begin DataSource.Edit; Field.Clear; Message.CharCode := 0; end; inherited; end; procedure Register; begin RegisterComponents('DBAddOns', [TDBLookupComboBoxEx]); end; end. peinhard |
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Danke.
|
Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hai Karstadt,
genau wegen solchen "Problemen" arbeite ich kaum noch mit DBxxxxx Komponenten zur visualisierung von Daten. Ich nehme dafür die "normalen" Edits, Comboboxen usw. Das bedeutet zwar etwas mehr aufwand beim tippen. Dafür habe ich aber eine bessere Kontolle über den Ablauf. Im Anhang mal ein 0815 Beispiel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 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