Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Selektion eines Buttons wieder los werden (https://www.delphipraxis.net/153455-selektion-eines-buttons-wieder-los-werden.html)

Medium 3. Aug 2010 17:09


Selektion eines Buttons wieder los werden
 
Moinsen!

Mit Bezug auf diesen (gescheiterten) Thread, hat sich meine Problemstellung etwas geändert.

Grob umrissen: Ein TBitButton, und ein TWebbrowser im Designmodus. Sobald der Button ein mal den Fokus hatte, kommen im Webbrowser Enter-Tastendrücke nicht mehr an, die dort üblicherweise einen neuen Paragraph einfügen.

So ein Button scheint zwei sorten von Fokus zu kennen. Ein mal den "normalen" Fokus, den man am gestrichelten Rahmen erkennt, und einen weiteren, der bei mir unter Win7 ein blauer dicker Rand ist (sonst glaub ich ein schwarzer dickerer Rand). Das Problem scheint nun diese zweite Art von Fokus zu sein, da die Enter-Drücke auf den Button angewendet werden, sobald er diesen hat. Der TWebbrowser hat zwar den "normalen" Fokus, und auch das Caret, aber der 2. Fokus scheint Vorrang zu genießen, und der Webbrowser bekommt diesen nicht durch SetFocus().
Ich war bisher auch nicht in der Lage herauszufinden, in wessen WndProc das geschieht. (Die Containersituation ist im konkreten Fall etwas komplexer als einfach auf einem Form. Details im verlinkten Thread.)

Was ich jetzt also suche, ist ein Weg meinen Buttons diesen 2. Fokus wieder wegzunehmen, wie es gleich nach Programmstart ja auch ist. Die Default-Property ist es schon mal nicht, die ist immer False, auch mit dickem Rand. Wonach müsste ich hier suchen?

Dankschö im Voraus!

Medium 3. Aug 2010 21:15

AW: Des Buttons zweiter Fokus
 
Ich habe nun heruasgefunden, dass dieser ominöse 2. Fokus "Selektion" heisst (Threadtitel daher angepasst), und etwas anderes ist als der tatsächliche "Fokus". Es können auch nicht alle Controls eine Selektion haben. Der Mist ist jetzt nur, dass ich bislang keinen Weg gefunden habe, die Selektion aus meinem Programm heraus zu beeinflussen! In diesem Thread hat oki ein Stück Code geposted, in dem TCustomContol.Selected ein Wert zugewiesen wird. Das TCustomControl meines D2010s kennt diese Property aber leider nicht, auch in keinem der Vorfahren. Ebenso habe ich keine Messages in diese Richtung finden können, kann aber nicht so recht glauben, dass es überhaupt keine Mittel gibt, diese dämliche Selektion wieder los zu werden!

Jeder noch so oberschmutzige Hack ist herzlichst willkommen, ich hab an diesem unnötigen Mist nun schon locker 2 Tage verbraten :(

Bernerbaer 3. Aug 2010 21:30

AW: Selektion eines Buttons wieder los werden
 
Wie du die Selektion wieder los wirst weiss ich nicht. Aber vielleicht hilft ja dieser Tip im Swissdelphicenter bezüglich der Entertaste swissdelphicenter

himitsu 3. Aug 2010 22:00

AW: Selektion eines Buttons wieder los werden
 
In Delphi sind die Eigenschaften .Cancel (ESC) und .Default (Enter) für solch ein Verhalten verantwortlich ... Näheres steht in der OH.

Den "normalen" Fokus bekommt man vom Button, indem man ihn woanders hinlegt (z.B. auf deinen Webbrowser).
Delphi-Quellcode:
{Form1.}ActiveControl := nil;
oder
{Form1.}ActiveControl := WebBrowser1;
oder
WebBrowser1.SetFocus;

Medium 3. Aug 2010 22:31

AW: Selektion eines Buttons wieder los werden
 
Default hat, wie gesagt, leider überhaupt keinen Einfluss darauf. Es wird weder beim Klick auf den Button auf true gesetzt, noch bringt explizites Setzen auf false im OnClick etwas. Der Button bleibt selektiert. Der Fokus ist auch nicht das Problem, der sitzt brav aufm Webbrowser, und erkennbar nicht auf dem Button (gestrichelter Rahmen verschwindet).

An den Application-Messagehandler hatte ich noch nicht gedacht, da müsste ja theoretisch ALLES erstmal landen. Mal schauen ob ich mit dem was fuckeln kann; das Problem wird dabei sein zu prüfen, ob der Webbrowser den Fokus hat - das Frame mit dem Browser wird nämlich dynamisch erzeugt...

Lieber wäre mir noch immer, den blöden Buttons die Selektion zu entreissen :?

mkinzler 4. Aug 2010 05:27

AW: Selektion eines Buttons wieder los werden
 
Default vestimmt auch nur, welcher Zuerst die Selektion hat.

himitsu 4. Aug 2010 07:01

AW: Selektion eines Buttons wieder los werden
 
Zitat:

Zitat von mkinzler (Beitrag 1039390)
Default vestimmt auch nur, welcher Zuerst die Selektion hat.

Nein, das ist das erste Control in der Erstellungsreihenfolge oder (wenn es gesetzt ist) ActiveControl.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 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