![]() |
frame "aktivieren"
moin in die runde,
ich habe in meinem prog 3 frames und habe das problem, dass ich die nicht so "aktiviert" bekomme, also dass darin zb die hints/mouseenter... nur funktionieren, wenn ich in das frame einmal reinklicke. habe schon alles moegliche versucht mit "click eines buttons im frame" per code, etcpp. aber nix funzt. hat jemand ne idee? tks vorab... ...de Schorsch |
AW: frame "aktivieren"
Frame.SetFocus im OnShow des Formulars?
|
AW: frame "aktivieren"
VCL oder FMX?
FMX - HitTest? |
AW: frame "aktivieren"
Was spricht dagegen TForm anstelle von TFrame zu verwenden?
Ich kann mich nicht erinnern wann ich das letzte mal Frames verwendet habe. Komplette Fenster haben keine Nachteile. Außer vieleicht ein paar mehr Bytes im Speicher. |
AW: frame "aktivieren"
Ich gehe tendenziell in genau die andere Richtung: Die Anwendung (und damit auch die GUI) mit Frames partitionieren und nach Bedarf zusammensetzen. Frames werden dynamisch erzeugt, je nachdem welcher gebraucht wird. Sollte es wirklich mal nötig sein, kann auch mal gerade ein Form erzeugt werden, das den Frame aufnimmt. Am Ende gibt es (außer eventueller Vererbung) im Wesentlichen nur das MainForm in der Anwendung und eben diese dynamischen Wrapper z.B. für floating, stay-on-top oder dialogbasierte Forms.
Ehrlich gesagt habe ich das eigentliche Problem auch noch gar nicht verstanden. |
AW: frame "aktivieren"
Zitat:
@Schorsch: Eventuell ist parent der Frames falsch gesetzt. |
AW: frame "aktivieren"
Wenn man den Frame sieht, kann eigentlich der Parent nicht ganz falsch sein.
Ob direkt auf der Form oder z.B. in einem Panel, GroupBox und Anderen, macht eigentlich auch keinen großen Unterschied. |
AW: frame "aktivieren"
Diese Formulierung ist für mich unklar:
Zitat:
Wie so oft wäre ein kleines Beispielprojekt, mit dem man das Problem nachstellen kann, sehr hilfreich. |
AW: frame "aktivieren"
moin in die runde.
erstmal tks fuer die rege beteiligung. vorab: ist ein fmx projekt. also, um das nochmal bissi naeher zu erlaeutern (is halt bissi trickey): ich habe ein mainform, das ein TGridLayout beinhaltet und das hat 3 x dasselbe form jeweils als frame integriert. und ihr muesst euch das in etwa so vorstellen - nehmen wir nen explorer - dass man bis zu 3 "explorer" aufklappen kann (in wirklichkeit wird einfach animiert das TGridLayout um die breite eines forms verbreitert/verschmaelert), sodass ich also max. 3 "explorer" nebeneinander haben und nun per drag and drop mit denen interagieren kann (war bissi schwierig, weil drdr unter fmx nicht so einfach ist ;-). und das form - also jew. die frames - haben eben buttons, etc. drin, die auf onMouseEnter, etc. reagieren. Und die wiederum zeigen im mainform eine jew. info an - das funzt halt auch - manchmal von alleine - aber manchmal eben nur, wenn ich in den frame reinklicke. hab schon alles moegliche versucht mit onmouseenter, onmousemove... im frame und setfocus, ... - doch da laeuft er irgendwie garnicht rein. übrigens: das parent ist das TGridLayout im main und "OnHint" benutze ich auch nicht - mouseenter/leave eben. Update: bevor ich euch jetzt zu viel arbeit macht: in den frames (form) ist wiederum ein tabcontrol mit mehreren tabs und ich habe jetzt soweit rausbekommen, dass wenn ich voraerts in den tabs springe klaut irgendwas den focus, denn beim "zurueckgehen" passiert das nicht. demnach muss ich noch bissi... ...de Schorsch |
AW: frame "aktivieren"
Zitat:
Wenn es ein TForm ist, gibt es hier vielleicht die Lösung: ![]()
Delphi-Quellcode:
SendMessage(MyForm.Handle , WM_NCACTIVATE, 1, 0);
Wobei MyForm das eingebettete Form ist. |
AW: frame "aktivieren"
mannomannfraudivers, ich glaub ich habs.
ich "switche" zwischen den pages mittels "SetActiveTabWithTransition", weils cooler aussieht. doch der parameter ".Slide" klaut den focus. mit ".None" funktioniert es - und auch wenn ich einfach nur .ActiveTab zuweise. Bitter, bitter, mal ueberlegen, was ich jetzt mache..
Code:
// switch page..
funzt net: tbcDBExplorer.SetActiveTabWithTransition(tbiTunnels,TTabTransition.Slide,TTabTransitionDirection.Normal); // switch page.. funzt: tbcDBExplorer.SetActiveTabWithTransition(tbiTunnels,TTabTransition.None,TTabTransitionDirection.Normal); uebrigens TTabTransition.Slide,TTabTransitionDirection.Reversed funktioniert (also zuruecksliden). komisch, komisch |
AW: frame "aktivieren"
Du könntest nach der Animation ja gezielt den Focus setzen.
Alternativ könntest du auch mal die Async-Version probieren - gegebenenfalls den Focus im AOnFinish setzen. |
AW: frame "aktivieren"
aber auf den SetActiveTabWithTransition habe ich doch keinen einfluss, oder? das ist ja keine eigene ani..
|
AW: frame "aktivieren"
Ja, aber die läuft komplett in dem Methodenaufruf ab. Nach dem Aufruf hast du wieder die Kontrolle.
Intern wird aber z.T. mehrfach
Delphi-Quellcode:
aufgerufen, wobei ich ja immer ein flaues Gefühl im Magen habe.
Application.ProcessMessages
Bei der Async-Version ist das offenbar nicht der Fall, aber da musst du den eventuellen Folgecode in dem AOnFinish-Parameter mitgeben. |
AW: frame "aktivieren"
moin,
danke erstmal fuer den tipp, aber ist mir irgendwie zu viel akt. ich finde, dass sowas einfach von haus aus funktionieren sollte - zumal es mit den anderen parametern bzw. "reversed" ja funktioniert. Und wenn ich schon "Application.ProcessMessages" höre... ich habe das jetzt einfach dem user ueberlassen, indem er es sich selbst in den einstellungen festlegen kann, ob er "sliding" verwenden will, da die "none sliding version" auch viel schneller ist. Tks... ...de Schorsch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 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