AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Modale Form -> SetFocus auf TLabeledEdit geht nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Modale Form -> SetFocus auf TLabeledEdit geht nicht

Ein Thema von Hobbycoder · begonnen am 18. Feb 2019 · letzter Beitrag vom 19. Feb 2019
 
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#1

Modale Form -> SetFocus auf TLabeledEdit geht nicht

  Alt 18. Feb 2019, 13:08
Hi,

ich bastel jetzt schon ne ganze Weile an einem Problem rum. Ich habe eine Login-Form, aber es will mir nicht gelingen, dem ersten LabeledEdit den Focus zu geben. Mit der Maus oder der Tab-Taste geht's schon, wenn die Form erst mal angezeigt wird, aber ich hätte es gern ohne Useraktion.

Bei all den ganzen Versuchen bin ich dann auf PostMessage(lbledtUsername.Handle, WM_SETFOCUS, 0, 0); in FormShow hängengeblieben, was zwar den Cursor auf mein LabeledEdit setzt, aber ich dann dort nichts eingeben kann, außer mit Tab zum nächsten Control zu wechseln, was dann zur Folge hat, dass ich das nicht mehr zurück ins vorherige Control komme (weder per Tab noch per Maus).

Ich bin ein bischen ratlos, weil ich mir das Verhalten so gar nicht erklären kann. Weder die Tatsache, dass LabeledEdit.SetFocus oder LMCLogin.ActiveControl:=LMCLogin.lbledtUsername wirkungslos bleiben, noch das sehr merkwürdige Verhalten nach dem PostMessage im FormShow.

Zur Verdeutlichung hier mal der Source (die auskommentierten Zeilen spiegeln meine Versuche von Workaround dar):
Delphi-Quellcode:
unit fLMCLogin;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, BadgeBtn, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TLMCLogin = class(TForm)
    lbledtUsername: TLabeledEdit;
    lbledtPassword: TLabeledEdit;
    bdgbtnLogin: TBadgeBtn;
    bdgbtnAbort: TBadgeBtn;
    tmr1: TTimer;
    procedure FormPaint(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure lbledtPasswordChange(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
  private
    FirstPaint: Boolean;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  LMCLogin: TLMCLogin;

implementation

{$R *.dfm}

procedure TLMCLogin.FormPaint(Sender: TObject);
begin
// if FirstPaint then
// begin
// FirstPaint:=False;
// lbledtUsername.SetFocus;
// end;
end;

procedure TLMCLogin.FormShow(Sender: TObject);
begin
// FirstPaint:=True;
// lbledtPassword.Text:='';
// bdgbtnLogin.Enabled:=False;
// lbledtUsername.SelectAll;
// lbledtUsername.SetFocus;
// self.ActiveControl:=lbledtUsername;
// tmr1.Enabled:=True;
// Perform(WM_NEXTDLGCTL, 0, 0);
  PostMessage(lbledtUsername.Handle, WM_SETFOCUS, 0, 0);
end;

procedure TLMCLogin.lbledtPasswordChange(Sender: TObject);
begin
  bdgbtnLogin.Enabled:=True;
  bdgbtnLogin.Default:=True;
end;

procedure TLMCLogin.tmr1Timer(Sender: TObject);
begin
// tmr1.Enabled:=False;
// lbledtUsername.SetFocus;
end;

end.
Aufruf dann so:
Delphi-Quellcode:
    LMCLogin.ActiveControl:=LMCLogin.lbledtUsername;
    LMCLogin.lbledtPassword.Text:='';
    LMCLogin.bdgbtnLogin.Enabled:=False;
    if LMCLogin.ShowModal=mrOK then
    ...
PS: Die Unit BadgeButton ist eine selbstgeschriebe, aber auch mit Standard-TButton erreiche ich gleiches Verhalten.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
 


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 18:19 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