Zitat:
Manchmal mosern manche auch völlig unbeabsichtigt. Glaub mir, da kenn ich mich gut aus
Gut zu wissen. Na hoffentlich passiert es mir nicht (mehr)
Ich möchte nämlich nicht bei Leuten rummosern, von denen ich hoffe, dass sie mir helfen
Zitat:
Wenn ich mal spekulieren darf: Du denkst dabei an den Windwos-Explorer, in dessen Dateifenster du eine Datei anklickst, woraufhin der Explorer diesen Eintrag in den Edit-Modus versetzt? Und das möchtest du nachbauen?
Ja, das ist richtig. Das Programm hat aber eigentlich keinen praktischen Nutzen, denn sonst könnte ich ja gleich den Windows-Explorer verwenden. Es ist für mich einfach nur eine Übung, da ich noch ein Anfänger bin, was Delphi (und andere Programmiersprachen
) betrifft.
Zitat:
Was aber hat das alles mit dem Fokus irgendwelcher Komponenten zu tun? [...] Wieso sollte man überhaupt künstlich einer Komponente den Fokus entreißen wollen?
Ich kann meinen Windows-Explorer-Nachbau dazu verwenden, um einen Ordner zu wählen. Aus dem gewählten Verzeichnis werden mir alle .jgp bzw. .jpeg Dateien in einer Miniaturansicht angezeigt. Dazu habe ich mir eine eigene Klasse geschrieben, die auf der TPanel-Klasse basiert. Auf dem Panel platziere ich eine TImage-Komponente (um die Miniaturansicht des Bildes zu erzeugen) sowie ein Label für den Datei-Namen und ein Edit um den Datei-Namen zu ändern. Wenn nun eine Datei selektiert wurde (ähnlich wie bei Windows) und ich noch einmal auf das Label klicke, dann wird das Label unsichtbar, das Edit wird sichbar und das Edit erhält den Fokus. Wenn ich in Windows einen Dateinamen ändere, dann verschwindet das Editier-Feld wieder, sobald ich mit der Maus irgendwo anders hinklicke (meiner bisherigen Beobachtung ist es völlig egal, wohin man klickt, so lange man nicht wieder auf das Editier-Feld selbst klickt). Und da setzt meine Implementierung an: Sobald ich irgendwo auf mein Formular oder auf eine beliebige Komponente auf dem Formular (außer dem fokusierten Edit), soll das Edit den Fokus verlieren. Im OnExit-Event wird das Edit dann wieder unsichtbar und das Label erscheint mit dem neuen Namen. Da sich bei mir die Panels, die die Miniaturansicht gewährleisten, in einer Scrollbox befinden, gebe ich ganz einfach den Fokus an die Scrollbox ab.
Wenn ich nun nachträglich neue Komponenten auf das Formular setze, dann muss ich immer daran denken, in deren OnClick-Events den Fokus auf die Scrollbox zu setzen (so lange beim Klick nichts anderes passieren soll). Das finde ich ziemlich unelegant, weshalb ich nach einer anderen Möglichkeit gefragt habe. So etwas wie "wenn immer geklickt wird und die Mausposition nicht mit der des Edits übereinstimmt, soll der Fokus auf die Scrollbox gesetzt werden (und anschließend das OnClick-Event der angeklickten Komponente ausgeführt werden)".
Mag sein, dass es bessere und elegantere Implementierungen gibt als die, die ich gewählt habe. Die Implementierung, die ich wähle, ist meistens nicht so elegant und schön (wie ich am Ende meistens feststelle
).