वीसीएल/कस्टम घटकों को प्राप्त करने के बिना हैकिंग के बिना केवल एक ही समाधान है - TForm.SetFocusedControl ओवरराइड + ऊपर बताए गए स्क्रॉलबार की स्थिति को फिर से सेट करना। एक चीज जिसे मैंने जोड़ा है वह बदसूरत कूद से बचने के लिए विंडो रेड्रो को अक्षम/सक्षम कर रहा है। यहां मेरा अंतिम स्निपेट है:
एसबीकॉन्टेनर टीएसक्रॉलबॉक्स है और नोएससीआरआरटीआरटी इसके अंदर एक नियंत्रण बिछा रहा है जो फोकस करता है लेकिन हम इसे स्क्रॉल-इन-व्यू नहीं करना चाहते हैं।
function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
var hpos, vpos: integer;
begin
if Control = NoScrCtrl then
begin
sbContainer.Perform(WM_SETREDRAW, WPARAM(False), 0);
hpos := sbContainer.HorzScrollBar.Position;
vpos := sbContainer.VertScrollBar.Position;
Result := inherited SetFocusedControl(Control);
sbContainer.HorzScrollBar.Position := hpos;
sbContainer.VertScrollBar.Position := vpos;
sbContainer.Perform(WM_SETREDRAW, WPARAM(True), 0);
sbContainer.Refresh;
end
else
Result := inherited SetFocusedControl(Control);
end;
हाँ, यह स्पष्ट है। –
स्क्रॉल बॉक्स का उपयोग न करें स्पष्ट समाधान प्रतीत होता है क्योंकि आपके पास आवश्यक –
@ डेविड से अधिक स्क्रॉल बार हैं: यदि RichEdit स्क्रॉलबॉक्स पर एकमात्र घटक है, तो मैं सहमत हूं। बेशक हम नहीं जानते कि यह है या नहीं। स्क्रॉलबॉक्स पर अपने एकल स्क्रॉलबार रखने वाले एक घटक को थोड़ा सा ... अजीब, वास्तव में होगा। –