AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

Ein Thema von daddy · begonnen am 23. Apr 2007 · letzter Beitrag vom 24. Apr 2007
Antwort Antwort
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#1

Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

  Alt 23. Apr 2007, 10:39
Ich bin mal wieder auf ein merkwürdiges Problem gestoßen, zu dem ich hier in der Delphi-Praxis nichts finden kann. Vielleicht weiß ja jemand etwas darüber, bevor ich mich jetzt auf die mühsame Suche in der VCL begebe:

In Edit1 führe ich im OnExit eine Aktion durch, die den Cursor erhält (z.B. Aufruf eines Meldefensters). Alles funktioniert, solange ich einen Feldwechsel per Tabulatortaste durchführe. Wenn ich aber in Edit1 stehe und per Maus auf Edit2 wechsle, erscheint - wie geplant - mein Meldefenster, das ich per Mausklick oder Tastatur wieder schließe. Anschließend ist - wie ebenfalls geplant - Edit2 fokussiert aber die Tastatursteuerung des Programms komplett verloren gegangen. Das Programm nimmt keinerlei Tastatureingaben mehr entgegen. Erst wenn ich mit der Maus auf ein anderes Feld klicke funktioniert es wieder.

Kennt jemand dieses oder ein ähnliches Problem? Weiß jemand eine Lösung?

Zur Veranschaulichung habe ich ein Mini-Beispielprogramm angehängt, das 3 Editfelder enthält und eine einzige von mir zugefügte Codezeile.

Gruß Daddy
Angehängte Dateien
Dateityp: zip edittest_205.zip (5,7 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

  Alt 24. Apr 2007, 09:16
* Push *

Hat niemand eine Idee hierzu? Handelt es sich um ein bekanntes Phänomen? Ich finde es etwas "erschreckend", dass ich im OnExit eines Feldes keine Meldung ausgeben kann. Das kann doch irgendwie nicht sein, dass eine solche Selbstverständlichkeit nicht funktioniert.

Bin dankbar für jeden Hinweis oder Kommentar!
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

  Alt 24. Apr 2007, 10:06
Schau dir mal das hier an, besonders das Posting von Ralph Friedman.

HTH,
Uli.
Uli Gerhardt
  Mit Zitat antworten Zitat
Schubi

Registriert seit: 4. Nov 2003
Ort: Happurg (Nürnberg)
331 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

  Alt 24. Apr 2007, 10:28
Das wäre eine unelegante, aber funktionierende Lösung:
Delphi-Quellcode:
Procedure KlickPoint(x,y : Integer);
var
  mm : TPoint;
begin
  GetCursorPos(mm);
  SetCursorPos(x,y);
  mouse_event(MOUSEEVENTF_leftDOWN,x,y,0,0);
  mouse_event(MOUSEEVENTF_leftUP,x,y,0,0);
  SetCursorPos(mm.x,mm.y)
end;

procedure TForm1.Edit2Enter(Sender: TObject);
var
  p : TPoint;
begin
  p.X := (Sender as TControl).Left;
  p.Y := (Sender as TControl).Top;
  KlickPoint(ClientToScreen(p).X+(Sender as TControl).Width-2,ClientToScreen(p).Y+2);
end;
Christian Schubert
Ich fange gerade erst an, den Umfang meiner Ahnungslosigkeit zu begreifen...
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

  Alt 24. Apr 2007, 11:45
Ich habe mir den Link von uligerhardt mal angesehen und festgestellt, dass es damit funktioniert. Habe das ganze noch ein wenig vereinfacht und jetzt am Ende folgende Lösung:

Delphi-Quellcode:
Own_ExitProc = WM_User + 42; // beliebiger noch verfügbarer Wert

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    CheckBox1: TCheckBox;
    procedure Edit1Exit(Sender: TObject);
  private
    procedure OwnExitProc(var Msg: TMessage); message Own_ExitProc;
  end;

procedure TForm1.OwnExitProc(var Msg: TMessage);
begin
  if csLButtonDown in ActiveControl.ControlState then
    PostMessage(ActiveControl.Handle, WM_LBUTTONUP, 0, 0);
  if Checkbox1.Checked then Messagedlg('Testmeldung', mtInformation, [mbok], 0);
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  PostMessage(Handle, Own_ExitProc, 0, 0);
end;
Wenn man dann noch das "PostMessage(Handle, Own_ExitProc, 0, 0);" direkt in CONTROLS.PAS ins "DoExit" einbindet, kann man sich zumindest sparen, für alle Felder ein "OnExit" mit diesem Aufruf zu hinterlegen und muss nur noch eine "OwnExitProc" für jedes Formular hinterlegen.

Vielen Dank für die Hinweise!
  Mit Zitat antworten Zitat
Hansa

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

Re: Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

  Alt 24. Apr 2007, 11:53
Müsste einfacher gehen. Setze mal von Hand SetFocus auf das gewünschte Edit. Geht das immer noch nicht, dann bestücke das Edit notfalls so : Edit1.Text := ''; Und wenn es dann immer noch nicht geht, dann muss ich die Stelle in meinem Source suchen. Kenne diese Effekte. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Delphi-Fehler im OnExit (Verlust der Tastatursteuerung)

  Alt 24. Apr 2007, 12:00
Hallo Hansa,

also damit funktioniert es definitiv nicht. Wenn Du in Deinem Quelltext was Einfacheres findest, bin ich daran natürlich sehr interessiert. Du kannst ja selber mal mein Mini-Programm aus Beitrag #1 runterladen und es ausprobieren.

Gruß, Daddy
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:11 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