Announcement

Collapse
No announcement yet.

Focus im Fenster mit Cursur setzen

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

  • Focus im Fenster mit Cursur setzen

    Ich habe ein Fenster mit fast 100 Editfeldern.<br>
    Meine Problem ist: ich möchte die Tasten VK_Up und Down zum wechseln der horizontalen Editfelder nutzen.<Br>
    In dem Ereignis Form.KeyDown habe ich folgendes schon ausgewertet<br>
    <br><br>
    Var I:Integer<br>

    If Sender Is TEdit Then Begin <br>
    With Sender As TEdit Do Begin<br>
    I:=IntegerVal(Glob.Zahlen(name));// function sucht aus einem String nur Zahlenwerte aus<br>
    If Key=Vk_Up Then Begin<br>
    If (I>20)Or (I<90) Then Begin<br>
    // hier krachts jetzt!!!! <br>
    (Sender as TDbEdit).Name:=('Dbedit'+inttostr(i-10));<br>
    (Sender as TDbEdit).SetFocus;<br>
    End;
    End;
    End;
    End;

  • #2
    Hallo,

    an deinem Code ist einiges nicht in Ordnung:

    1. Wenn du das Ereignis KeyDown im Formular abfängst, ist SENDER immer das Formular, nicht das Edit-Feld.
    2. Mit der Zeile (Sender as TDbEdit).Name:=('Dbedit'+inttostr(i-10)); versuchst du, den Namen der Komponente zu ändern!

    Versuche mal diesen Code (Voraussetzung: Benennung der Controls edit1 .. edit100):

    <pre>
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
    var t : integer;
    s : string;
    begin
    if ActiveControl is TEdit then
    s := (ActiveControl as TEdit).name;
    t := StrToInt(copy(s,5,length(s)-length('edit')));
    case t of
    20..90 : TEdit(FindComponent('Edit'+inttostr(t-10))).setFocus;
    end;
    end;
    </pre>

    Einfacher wäre es wahrscheinlich, die Eigenschaft TAG zu verwenden.

    Viel Erfolg..

    Comment


    • #3
      Danke, mit Tag konnte ich leider nicht mehr arbeiten, weil ich sie schon für was anderes gebraucht habe. <br>Das mit dem Dbedit muß war noch ein Umstellungsproblem(da hing mal'ne Datenbank dahinter)

      Comment

      Working...
      X