Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBLoockupbox möglichkeit kein Auswah zu treffen? (https://www.delphipraxis.net/73010-dbloockupbox-moeglichkeit-kein-auswah-zu-treffen.html)

Karstadt 10. Jul 2006 20:57

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.

jbg 10. Jul 2006 21:42

Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
 
Im OnKeyDown Event auf VK_DELETE prüfen und dann ItemIndex := -1 setzen.

Karstadt 10. Jul 2006 22:03

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.

Peinhard 10. Jul 2006 22:10

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

Michael Habbe 10. Jul 2006 22:32

Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
 
Zitat:

Zitat von Peinhard
Mit der Maus bliebe 'auf die Schnelle', also ohne was eigenes zu stricken, wohl nur ein PopupMenu für die Box

Ohne Popup-Menü geht das über die Auswertung des Rechtsklicks.

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;

Peinhard 10. Jul 2006 23:30

Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
 
Gute Idee, das... Hier ein schnell gestrickter Abkömmling:

Delphi-Quellcode:
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.
Bei Fehlern bitte nicht hauen... Verbesserungen gerne.

Edit: Prozedur ClearField angepasst...

peinhard

Jelly 11. Jul 2006 06:19

Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
 
Also meine TDBLoopkupComboBoxen haben die Eigenschaft NullValueKey, die eigentlich genau das erledigt.

Peinhard 11. Jul 2006 08:04

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:
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.
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...

peinhard

Karstadt 11. Jul 2006 22:45

Re: DBLoockupbox möglichkeit kein Auswah zu treffen?
 
Danke.

Sharky 12. Jul 2006 10:18

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.
Seite 1 von 2  1 2      

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