Announcement

Collapse
No announcement yet.

Eingabe im Edit-Feld.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eingabe im Edit-Feld.

    Hallo!
    In meiner Anwendung soll der Benutzer in einem Edit-Feld eine
    Eingabe tätigen.
    Diese soll mit der Enter-Taste abgeschlossen werden. Daraufhin
    mochte ich eine Berechnung ausführen. Derzeit verwende ich das
    KeyDown-Ereignis um die Berechnung auszulösen. Leider gibt der
    PC einen Beep-Ton ab, wenn ich die Enter-Taste betätige.
    Wie kann ich den Ton verhindern?
    Leider kann ich keinen Button einsetzen um die Berechnung auszuführen.
    Vielleich kann mit jemand helfen.
    Schon jetzt vielen Dank!
    mfg Thomas

  • #2
    <pre>
    { ************************************************** **************
    Typ : Formular-Unit
    Autor : Andreas Kosch
    Erstellt am : 25.08.1999
    Compiler : Delphi 4.02 UpdatePack#3
    Betriebssystem : Windows NT
    Beschreibung : In TEdit-Instanzen löst die ENTER-Taste den
    automatischen Wechsel in das nächste Eingabe-
    feld (genauer gesagt zum nächsten Control)
    aus.
    Revisionen :
    ************************************************** ************** }

    unit MapEnterToTabFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, ComCtrls;

    type
    TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    StatusBar1: TStatusBar;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    { Wenn die TForm-Eigenschaft KeyPreview auf TRUE gesetzt wird,
    kann das Formular alle Tastaturbotschaften der Chieldfenster
    abfagen und speziell darauf reagieren. Der automatische Wechsel
    zum nächsten Control wird nur bei TEdit-Instanzen ausgelöst,
    damit beim Button die ENTER-Taste auch die Button-Funktion
    auslöst. }

    procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = Chr(VK_RETURN) then
    if ActiveControl is TEdit then
    begin
    Key := #0;
    Perform(WM_NEXTDLGCTL, 0, 0);
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage('Enter-Taste löst Button aus!');
    end;

    end.
    </pre&gt

    Comment


    • #3
      Ich möchte bei der Focusierung eines TEdit Feldes über das Ereignis OnEnter eine MessageDlg aufrufen um eine Abfrage durchzuführen. Bei der Feld- Anwahl über die TAB-Taste funktioniert dies einwandfrei. Bei Der Feldanwahl über die Maustatste und beenden der MessageDlg bleibt die linke Maustaste 'hängen', so das im TEdit-Feld der enthaltene Text beim verschieben der Maus markiert wird. Eine Eingabe ist erst nach nochmaligem Betätigen der linken Maustaste möglich. Wer kann mir einen Tip geben?
      MfG
      Bernhar

      Comment


      • #4
        Hallo,

        Win32 definiert eine bestimmte Botschaftsreihenfolge für einen erfolgreichen Fokuswechsel. Dies spielt solange keine Rolle, bis innerhalb dieser Botschaftsverarbeitung der Fokus programmgesteuert sofort weitergegeben wird. Wird in der Ereignisbehandlung für OnEnter ein Dialog aufgerufen, verliert das Control sofort wieder den Fokus (obwohl die Win32-Botschaftsreihenfolge noch nicht korrekt abgearbeitet wurde). Daher würde ich zur Lösung des Problems eine "Zeitverzögerung" einbauen: Über <b>PostMessage</b> wird der Aufruf von <b>MessageDlg</b> auf einen späteren Zeitpunkt verschoben. Die private Botschaft PM_ENTER wird an das Ende der Botschaftswarteschlange gelegt, so das Win32 alle anderen Botschaften vorher korrekt abarbeiten kann. Über die <b>Tag</b>-Eigenschaft von TEdit kann eine Botschaftsbehandlungsmethode für verschiedene TEdit-Instanzen zuständig sein:
        <pre>
        unit Unit1;

        interface

        uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
        StdCtrls;

        const
        PM_ENTER = WM_APP + 1;

        type
        TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        procedure Edit2Enter(Sender: TObject);
        private
        { Private-Deklarationen }
        procedure PMENTER(var Msg: TMessage); message PM_ENTER;
        public
        { Public-Deklarationen }
        end;

        var
        Form1: TForm1;

        implementation

        {$R *.DFM}

        procedure TForm1.Edit2Enter(Sender: TObject);
        begin
        PostMessage(Handle, PM_ENTER, 0 , Edit2.Tag);
        end;

        procedure TForm1.PMENTER(var Msg: TMessage);
        begin
        if MessageDlg('On_Enter ist eingetroffen: Tag ermitteln?',
        mtConfirmation, [mbYes, mbNo], 0) = mrYes then
        begin
        ShowMessage('Eigenschaft Tag: ' + IntToStr(Msg.lParam));
        end;
        end;

        end.
        </pre&gt

        Comment


        • #5
          <B>Adelheid Liewert</B>

          <B>INSERT EIN/AUS</B>

          Wie kann ich für Tedit oder TMemo <B>INSERT</B> ein- bzw. ausschalten

          Comment

          Working...
          X