![]() |
Hi Luckie,
mußt nur lesen ! :P
Code:
Aktiv ist im Code meine Variante, weil die noch kürzer ist. :mrgreen: Die von Luckie ist die auskommentierte. Die funktionieren aber trotzdem total gleich!! Anscheinend machen Show und Hide nichts anderes, als visible auf true bzw. false zu setzen.
procedure TForm1.KGnrEnter(Sender: TObject);
begin // KGListBox.Visible := true; KGlistBox.Show; WITH DataModul.KGdatensatz DO BEGIN Active := false; SelectSQL [0] := 'SELECT * FROM KG8'; Active := true; while not EOF do begin KGlistBox.Items.Add(FieldByName('NR').AsString + ' ' + FieldByName('BEZ').AsString); next; end; end; end; procedure TForm1.KGnrExit(Sender: TObject); begin KGlistBox.Clear; // KGlistBox.visible := false; KGlistBox.Hide; end; Das KGlistBox.Clear hat mit Bildschirm usw. nichts zu tun ! Es muß im OnExit die Datenmenge, die in der Listbox angezeigt werden soll, wieder leer machen, da diese in OnEnter erzeugt wird. Fehlt diese Zeile füllt sich die Box bei jedem OnEnter immer mehr mit Duplikaten. Das wars dann wohl. :hello: Die Combobox will ich nicht verwenden, da es für den Anwender einen Arbeitsschritt mehr macht und ansonsten nichts bringt. Gruß Hansa |
Editfeld für Eingaben sperren
Hi,
Jetzt hab ich noch was. Wie kriege ich es hin, daß in ein Editfeld nach der ersten Eingabe nichts mehr geändert werden soll ? Na klar, ich setze im OnExit Event ein ReadOnly. Bewege ich mich aber mit Tab über den Bildschirm, geht er trotzdem noch in das Feld, ändern kann man zwar nix, aber er geht auch nicht in das nächste editierbare Feld. Gruß Hansa |
Hi Hansa,
setze es doch einfach auf: Edit1.Enabled := False; Damit kommst Du auch nicht mit dem Tab rein und das ReadOnly kannst Du Dir dann auch sparen. Und wenn Du es wieder brauchst, dann setze es einfach wieder auf True. Grüsse, Daniel :hi: |
Hi Daniel B,
habe mich verschrieben. Meinte natürlich enabled und nicht R/O. Hab jetzt im Quelltext nachgeschaut, steht richtig drin. Nachdem ich enabled auf false gesetzt habe, habe ich anscheinend nicht wieder compiliert. :oops: Gehen tuts schon trichtig. Gruß Hansa |
Moin Hansa,
nur noch einmal kurz zur ComboBox Variante die Sakura gepostet hat. Wenn Du die mit dem ComboBox Style csDropDownList kombinierst, hast Du auch den Effekt, dass der User nichts eingeben kann. Das Edit Feld ist dann auch nicht beschreibbar. Um zu verhindern, das jemand mit dem Tabulator in ein Feld kommt könntest Du auch TabStop auf false setzen. Dann würde das Feld auch übersprungen werden. |
Hi Christian,
das mit der Combobox ist interessant, seh ich mir mal an. Das wäre aber so ungefähr das gleiche, wie mit meiner Listbox. Hinzu kommt aber noch folgendes : Will in irgendeiner Box die Nr UND die Bezeichnung unterbringen, z.B. 1 Privatkunde 2 Rabattkunde etc. Es geht halt darum, daß die Oma damit zurecht kommt und auch die flinke Tippse. Die Tippse kommt einmal die Woche, hat die Nummern im Kopf und hackt sie ein. Die Oma braucht ohne Aufwand eine Hilfestellung. In der Listbox habe ich es so gemacht, daß die nr und bez zu einem string gekoppelt werden. Das ist nicht sehr elegant, weil ich dann das Auswahlfeld wieder auseinanderreißen muß, da der Zugriff auf die DB nur über die Nr. läuft. Wegen eventuell gleicher Bez. SQL muß das ganze dann auch noch kapieren. Um dies zu vermeiden, habe ich auch ein Grid in Betracht gezogen. Wie gesagt, die ComboBox muß ich mir nochmal anschauen. Gruß Hansa |
Hallo:
Da war doch noch was : Zitat:
Das Auswahlfeld soll er ja nutzen können, um die KG-Nr., die eventuell falsch eingegeben wurde zu korrigieren ! Er soll nur nicht die Nr. einfach so ändern. Stelle meinen code mal hier rein. Kommentare willkommen :
Code:
unit KGform;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, FIBQuery, pFIBQuery, StdCtrls, Mask, DBCtrls, ComCtrls; type TForm1 = class(TForm) Label2: TLabel; KGlistBox: TDBListBox; KuAnrede: TDBedit; KuName: TDBEdit; KuStrasse: TDBEdit; KuOrt : TDBedit; KuNr: TEdit; KGnr: TEdit; Label1: TLabel; procedure FormShow(Sender: TObject); procedure KUnrExit(Sender: TObject); procedure KGnrEnter(Sender: TObject); procedure KGnrExit(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation USES DataMod; {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin KGlistBox.Hide; KuNr.SetFocus; end; procedure TForm1.KUnrExit(Sender: TObject); begin IF KuNr.Text <> '' THEN BEGIN WITH DataModul.KuDatensatz DO BEGIN active := false; SelectSQL [0] := 'SELECT * FROM KUNDE8 WHERE NR = ' + KuNr.text; active := true; IF IsEmpty THEN BEGIN ShowMessage ('Kunde existiert nicht !'); KuNr.SetFocus; END ELSE BEGIN KuNr.enabled := false; // Kunden-Nr. nicht editierbar { WITH DataModul.KGdatensatz DO BEGIN Active := false; SelectSQL [0] := 'SELECT * FROM KG8 WHERE ID = ' + FieldByName('IDKGH').AsString; Active := true; IF NOT IsEmpty THEN Label1.Caption := '(' + FieldByName('BEZ').AsString + ')'; END; } KuAnrede.SetFocus; // erstes editierbares Feld END; END END ELSE BEGIN ShowMessage ('Kunden-Nr. muß eingegeben werden !'); KuNr.SetFocus; END end; procedure TForm1.KGnrEnter(Sender: TObject); begin KGlistBox.Show; WITH DataModul.KGdatensatz DO BEGIN Active := false; SelectSQL [0] := 'SELECT * FROM KG8'; Active := true; while not EOF do begin KGlistBox.Items.Add(FieldByName('NR').AsString + ' ' + FieldByName('BEZ').AsString); next; end; end; end; procedure TForm1.KGnrExit(Sender: TObject); begin KGlistBox.Clear; KGlistBox.Hide; IF KGnr.Text <> '' THEN WITH DataModul.KGdatensatz DO BEGIN Active := false; SelectSQL [0] := 'SELECT * FROM KG8 WHERE NR = ' + KGnr.text; Active := true; IF NOT IsEmpty THEN Label1.Caption := '(' + FieldByName('BEZ').AsString + ')'; END; end; end. |
Moin Hansa,
ich meinte, dass man in das Editfeld einer ComboBox mit csDropDownList nichts eingeben kann, was nicht in der Liste zu finden ist. Bei Deiner Erklärung wozu Du es brauchst, erscheint ein StringGrid/ListView aber auch nicht verkehrt. Was mir allerdings nicht ganz einleuchtet: Warum zeigst Du erst die Listbox an, und füllst sie dann? Das würde ich umgekehrt machen (egal, welches Control Du dafür verwendest). |
Moin Chris,
Zitat:
Aber bei meiner Interbase DB mit bisher 5 Datensätzen (oder sind es 4 ?) 8) fällt es (noch) nicht auf. Wird morgen direkt geändert. Gruß Hansa |
Hallo Hansa,
noch eine kleinigkeit zur ComboBox. Jeder Eintrag hat einen ItemIndex. Du willst das jeder Eintrag auch eine Zahl hat. Dazu könntest Du diesen Index nutzen. Immer wenn Du ein neuen Eintrag einfügst, dann nimmst Du den Index des vorherigen +1 und setzt es zu einem String zusammen, dann nur noch einfügen und schon hast Du das Ergebnis Zahl + Name Autom. erzeugt. Grüsse, Daniel :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 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