Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBLookupCombo: Gibt´s was Besseres? (https://www.delphipraxis.net/62212-dblookupcombo-gibt%B4s-besseres.html)

NSI 1. Feb 2006 12:21

Datenbank: Access • Version: 2003 • Zugriff über: ADO

DBLookupCombo: Gibt´s was Besseres?
 
Hi!

Ich wollte "mal schnell" ... und jetzt hänge ich schon einen halben Tag durch:

Ich suche eine DBLookupCombo mit folgenden Fähigkeiten:
  • Autolocator möglichst mit Reduktion der Liste (optional)
  • Eventmeldung, wenn die Eingabe in der Liste fehlt (um einen neuen DS anzulegen)
  • Unterstützung des Mausrads, wenn die Liste auf ist
  • Delphi 2006-"fähig"
Vom Verhalten also vergleichbar mit der Combo aus Access.

Da ich kein begandeter Komponenten-Bastler bin, aber - solange es im Rahmen bleibt - zahlwillig, bin ich gleichermaßen für Kaufkomponenten empfänglich (wenn es keine alternative dazu gibt, natürlich).

Jeder Tipp ist willkommen.

Norbert

Ferber 1. Feb 2006 14:00

Re: DBLookupCombo: Gibt´s was Besseres?
 
Also, warum MouseWheel in DBLookupCombo nicht implementiert ist, ist mir auch nicht klar.
Wieder typisch Borland, einfach vergessen, :mrgreen: aber an dem solls nicht scheitern.

Der DBGrid reagiert auf das MausRad, also dort (mit leichter Modifikation) abgekupfert.

Delphi-Quellcode:
unit DBLookupComboBoxEx;

interface

uses
  Windows, SysUtils, Classes, Controls, Messages, DBCtrls, Types;

type
  TDBLookupComboBoxEx = class(TDBLookupComboBox)
  private
  protected
    function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override;
    function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override;
  public
  published
    property OnMouseWheelDown;
    property OnMouseWheelUp;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('XPCtrls', [TDBLookupComboBoxEx]);
end;

{ TDBLookupComboBoxEx }

function TDBLookupComboBoxEx.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := False;
  if Assigned(OnMouseWheelDown) then
    OnMouseWheelDown(Self, Shift, MousePos, Result);
  if (not Result) and (ListSource.DataSet.Active) then
  begin
    Perform(WM_KEYDOWN, VK_DOWN, 0);  // Tastaturereignis wird der ComboBox untergejubelt
//    ListSource.DataSet.MoveBy(1);   // Originalzeile aus DBGrid
    Result := True;
  end;
end;

function TDBLookupComboBoxEx.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean;
begin
  Result := False;
  if Assigned(OnMouseWheelUp) then
    OnMouseWheelUp(Self, Shift, MousePos, Result);
  if (not Result) and (ListSource.DataSet.Active) then
  begin
    Perform(WM_KEYDOWN, VK_UP, 0);     // Tastaturereignis wird der ComboBox untergejubelt
//    ListSource.DataSet.MoveBy(-1);   // Originalzeile aus DBGrid
    Result := True;
  end;
end;

end.
Damit hätten wir mal das MouseWheel. :spin:

Edit: Bei der DBLookupListBox isses natürlich genauso :mrgreen:, also weitere Compos erzeugen :coder:

NSI 1. Feb 2006 15:09

Re: DBLookupCombo: Gibt´s was Besseres?
 
Zitat:

Zitat von Ferber
Also, warum MouseWheel in DBLookupCombo nicht implementiert ist, ist mir auch nicht klar.{...}

Wow! Ich sehe, ich sollte mich doch dringend mal mit dem erweitern vorhandener Compos auseinander setzen (Problem: Davor wäre halt noch so viel anders zu erledigen, was Delphi know how betrifft... ).

Das mit dem Lookup / Neu kann ich evtl. mit einer etwas anderen Bedienung realisieren (man muss halt einen button anklicken, um einen neuen Eintrag anzuhängen). Wobei ich weiterhin gespannt bin, wie das weitergeht; dass hier mal schnell eine passende Komponente entstehen könnte, hatte ich zugegebenermaßen nicht erwartet.

Hatte ich mich eigentlich schon bedankt? ;)

Ferber 1. Feb 2006 15:32

Re: DBLookupCombo: Gibt´s was Besseres?
 
Gern geschehen ! :wink:

Zitat:

Zitat von NSI
  • ...
  • Autolocator möglichst mit Reduktion der Liste (optional)
  • Eventmeldung, wenn die Eingabe in der Liste fehlt (um einen neuen DS anzulegen)
    ...

Das sind interessante Anregungen.
Jedoch lässt die DBLookUpComboBox IMHO nur Eingabewerte zu, die in der Lookup-Datenmenge vorhanden sind.
Oder bin ich da auf dem Holzweg :?:

NSI 1. Feb 2006 17:51

Re: DBLookupCombo: Gibt´s was Besseres?
 
Zitat:

Zitat von Ferber
Gern geschehen ! :wink:

Zitat:

Zitat von NSI
  • ...
  • Autolocator möglichst mit Reduktion der Liste (optional)
  • Eventmeldung, wenn die Eingabe in der Liste fehlt (um einen neuen DS anzulegen)
    ...

Das sind interessante Anregungen.
Jedoch lässt die DBLookUpComboBox IMHO nur Eingabewerte zu, die in der Lookup-Datenmenge vorhanden sind.
Oder bin ich da auf dem Holzweg :?:

Ein Event "Nicht in der Liste" wäre da die Lösung, um zu Fragen, ob der Eintrag als neues Element in die zugrundeliegende Tabelle rein soll - noch ein paar Zeilen Code für ggf. Index etc. - requery - und das ganze ist glatt und schick in die Benutzerführung integriert. Das mit der Reduktion ist eher ein optischer Gag, kommt aber gut... .


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 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