كيف انتقل من كسبيثون wx.html.HtmlWindow تتراجع إلى ما كان عليه عندما ينقر المستخدم على رابط؟

StackOverflow https://stackoverflow.com/questions/1400179

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا باستخدام كسبيثون wx.html.HtmlWindow لعرض جزء من واجهة بلدي. يمكن للمستخدم انتقل لأسفل قائمة من الروابط في نافذة أصغر من القائمة. عند النقر على وصلة، ولست بحاجة إلى إعادة رسم صفحة الويب، ولكن أريد أن أعود موقف الصفحة إلى حيث النقر فوقه.

ولقد حاولت MouseEvent.GetLogicalPosition () على الحدث، لكنه يريد DC وأفضل ما استطعنا القيام به هو الحصول على نفس المعلومات GetPosition ()، لذلك لا يجب أن يغذي هذا الحق واحد.

وكما أنني حاولت HtmlWindow.CalcScrolledPosition ()، ولكن يبدو أن لا يتوفر في HtmlWindow لأنني الحصول على NotImplementedError ...

ما أود هو موقف التمرير التي يمكن استخلاصها من MouseEvent، أو المعلومات OnLinkClicked.

وأنا أعلم عن HtmlWindow.ScrollToAnchor ()، ولكن هذا غير المستقر وغير جمالي - أنا أفضل أن تجاوز ذلك إن أمكن حتى أستطيع أن انتقل إلى الوراء <م> بالضبط إلى حيث قام المستخدم بالنقر فوق

وشكرا!

هل كانت مفيدة؟

المحلول

وماذا عن وجود نظرة في مصدر wxHtmlWindow للإلهام؟ على سبيل المثال في wxHtmlWindow::LoadPage() : أنه

// store[s the current] scroll position into history item:
int x, y;
GetViewStart(&x, &y);
(*m_History)[m_HistoryPos].SetPos(y);

وهذا المحفوظة يستخدم موقف التمرير في <لأ href = "http://svn.wxwidgets.org/viewvc/wx/wxWidgets/trunk/src/html/htmlwin.cpp؟annotate=61772#l768" يختلط = " نوفولو noreferrer "> wxHtmlWindow::HistoryBack() :

Scroll(0, (*m_History)[m_HistoryPos].GetPos());
Refresh();

وبالعودة إلى موقف حفظها.

وأود أن نفترض أن هذا المدمج في التعامل مع "بأول إلى الأخير الموقف في إطار" ليس أكثر "مقشر وغير جمالي". يمكن شيء عمل مماثل بالنسبة لك، أيضا؟

نصائح أخرى

وربما متأخرا بعض الشيء، ولكن مع بعض النصائح من الفأس، وبعض التلميحات من <لأ href = "https://stackoverflow.com/questions/1871405/how-do-i-keep-a-wx-html- htmlwindow-في-ث-نفس الموقف خلال تغيير الحجم من دون-FL "> هنا ، وأعتقد أن الدعوة:

scrollpos = wx.html.HtmlWindow.GetViewStart()[1]

ووتخزين ذلك، ثم القيام بعد ذلك دعوة إلى:

wx.html.HtmlWindow.Scroll(0, scrollpos)

ويعمل بالنسبة لي. بالطبع، كنت بحاجة إلى تغيير wx.html.HtmlWindow إلى مرجع الفعلية إلى مثيل.

وهنا هو ما أقوم به للتمرير الصفحة لموقفها السابق. أفعل ذلك لتجنب وامض.

        pos = self.GetViewStart()[1]
        self.Freeze()
        self.SetPage(src)
        if save_scroll_pos:
            self.Scroll(0, pos)
        self.Thaw()

وعادة، انقر فوق وtrigged الأحداث أحداث MouseUp. إذا كنت تتبع الموقف الماوس عن طريق التقاط أي أحداث MouseDown، وسوف تعرف حيث وقع الماضي فوق (MouseUp)، والتي يجب أن تسمح لك لإعادة بناء الأشياء.

لهذه المشكلة بالذات، قد يكون لديك لبذل المزيد من العمل قليلا في MouseDown مثل فحص إذا كانت ضمن سيطرة wxHtmlWindow وإذا كان الأمر كذلك، ثم حفظ شيء من هذا القبيل رقم سطر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top