AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Editfeld mit automatischer Listbox

Ein Thema von Hansa · begonnen am 5. Okt 2002 · letzter Beitrag vom 19. Okt 2002
Antwort Antwort
Seite 2 von 3     12 3      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11
  Alt 5. Okt 2002, 20:58
Hi Luckie,

mußt nur lesen !

Code:
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;
Aktiv ist im Code meine Variante, weil die noch kürzer ist. 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.

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.

Die Combobox will ich nicht verwenden, da es für den Anwender einen Arbeitsschritt mehr macht und ansonsten nichts bringt.

Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

Editfeld für Eingaben sperren

  Alt 5. Okt 2002, 21:09
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
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#13
  Alt 5. Okt 2002, 21:15
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14
  Alt 5. Okt 2002, 21:42
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. Gehen tuts schon trichtig.

Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#15
  Alt 5. Okt 2002, 22:43
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16
  Alt 6. Okt 2002, 01:39
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#17
  Alt 6. Okt 2002, 01:58
Hallo:

Da war doch noch was :

Zitat:
Wenn Du die mit dem ComboBox Style csDropDownList kombinierst, hast Du auch den Effekt, dass der User nichts eingeben kann
Du meinst, dann geht die ComboBox von alleine auf? Aha, sehr gut, aber nicht für diesen Zweck. Die Sperre des Editfeldes ist für die Kundennr. gedacht. Sobald diese den DS selektiert hat, soll alles verfügbar sein, NUR NICHT die Kundennr. selbst.

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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#18
  Alt 6. Okt 2002, 03:05
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).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#19
  Alt 6. Okt 2002, 03:16
Moin Chris,

Zitat:
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).
Ja, das ist Blödsinn, Danke für den Tip. Will im Moment wenigstens überhaupt etwas sehen, wie ist egal. Bei Millionen Feldern wäre das aber doch schlimm.

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
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#20
  Alt 6. Okt 2002, 11:00
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:30 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