ABA


"להשיג מיקום של LINK עם BHO"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15967 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15967
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   16:29   27.06.10   
אל הפורום  
  להשיג מיקום של LINK עם BHO  
 
   ערכתי לאחרונה בתאריך 27.06.10 בשעה 16:33 בברכה, ronen333
 
הקשבתי בעצתו של עומר (NETBOY), וחקרתי קצת על BHO.
ניסתי להשיג את המיקום של הלינק (כי אני מעוניין לעצמיד עליו פקד אחר).
אבל זה לא מצמיד לי את זה בצמוד ללינק.. (ההצמדה נעשת בצורה נכונה).
ושבדקתי את המיקומים בפיקסלים הם באמת לא איפה שהוא אמורים להיות...

עשיתי זאת כך:


IWebBrowser2 webBrowser2 = (IWebBrowser2)webBrowser;
IHTMLDocument2 document = (IHTMLDocument2)webBrowser2.Document;
foreach (IHTMLElement2 tempElement in document.links)
{
HTMLAnchorElementClass a = (HTMLAnchorElementClass)tempElement;
//System.Windows.Forms.MessageBox.Show(a.href);


IHTMLRect rect = a.getBoundingClientRect();
Win32API.RECT r = new Win32API.RECT();
r.Left = rect.left;
r.Bottom = rect.bottom;
r.Right = rect.right;
r.Top = rect.top;
webElementsRECTS.Add(r);

}

ואז אני שם את הLABEL במיקום הבא:


int xOrigin = rect.Left+ (rect.Right - rect.Left) / 2;
int yOrigin = rect.Top - (rect.Bottom - rect.Top) / 2; ;
//create object at the location
Label label = new Label();
label.Location = new Point(xOrigin, yOrigin);

אתם יכולים להתעלם מהמבנה RECT שלי.. פשוט ככה אני שומר את זה ואז משתמש בשלב מאוחר יותר.
הקטע הוא שאני חשוב שgetBoundingClientRect לא באמת מביא לי מלבן במיקום הלינק...

למישהו יש מושג מה אני צריך לעשות?



                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אני חושב שאני יודע למה, צריך את עזרתכם ronen333  28.06.10 12:26 1
  למה אתה מנסה לחשב מיקום אבסולוטי... Ice Cold  28.06.10 13:17 2
     מה הכוונה? ronen333  28.06.10 13:34 3
         הצלחתי למצוא את הOFFSET של הDOCUMENT ronen333  28.06.10 14:14 4
             אף אחד לא רוצה לעזור? :( ronen333  29.06.10 11:26 5

       
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   12:26   28.06.10   
אל הפורום  
  1. אני חושב שאני יודע למה, צריך את עזרתכם  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 28.06.10 בשעה 12:29 בברכה, ronen333
 
זה בגלל שהמיקום של הלינק הוא בהתאם לפינה השמאלית העליונה של הdocument בדפדפן.. כלומר מהדף עצמו לא כולל הOFFSET של התוכנה עצמה עם התפריטים והכל..
מישהו יודע איך אני משיג את הOFFSET הזה?

כלומר החלק הזה:


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   13:17   28.06.10   
אל הפורום  
  2. למה אתה מנסה לחשב מיקום אבסולוטי...  
בתגובה להודעה מספר 0
 
אם אתה רוצה ליצור אובייקט חדש ליד לינק, תמצא את המספר שלו ברשימת הבנים של האבא שלו, ותיצור אחד חדש באינדקס אחד אחריו...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   13:34   28.06.10   
אל הפורום  
  3. מה הכוונה?  
בתגובה להודעה מספר 2
 
   ערכתי לאחרונה בתאריך 28.06.10 בשעה 13:40 בברכה, ronen333
 
אני צריך את המיקום שלו כי אני מדביק LABEL מעליו..

חשבתי לגלות את הפרוסס של התפריט הזה למעלה, ואז ליצור מלבן מימנו.. אבל לא מצאתי את הCLASS של אותו פרוסס.

נ.ב- זה לא בASP.NET או משהו.. אני משתלט על חלון אחר ורוצה למקם LABEL על כל לינק, בכל דף שבו אגלוש.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   14:14   28.06.10   
אל הפורום  
  4. הצלחתי למצוא את הOFFSET של הDOCUMENT  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 28.06.10 בשעה 14:20 בברכה, ronen333
 
ככה למעונייים:

RECT tabRect;
IntPtr frame = FindWindowEx(controlsWindow, IntPtr.Zero, "Frame Tab", null);
if (frame != IntPtr.Zero)
{
IntPtr tab = FindWindowEx(frame, IntPtr.Zero, "TabWindowClass", null);
if (tab != IntPtr.Zero)
{
GetWindowRect(tab, out tabRect);
//....
}

פשוט לוקחים את הTOP והLEFT (למרות שהLEFT הוא אפס..).

עכשיו משום מה חסר לי עדיין OFFSET של שמאל וקצת למעלה.. הנה תמונה:

0 אמור להיות איפה שLEARN MORE

למישהו יש מושג איך אני מתקן את זה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   11:26   29.06.10   
אל הפורום  
  5. אף אחד לא רוצה לעזור? :(  
בתגובה להודעה מספר 4
 
   גם חישבתי את כל הOFFSETים של האבות וזה עדיין לא עוזר >:
כך:

private static int FindPosX(HTMLAnchorElementClass obj)
{
int sum = obj.offsetLeft + obj.clientLeft + obj.offsetWidth;
IHTMLElement parent = obj.offsetParent;
while (parent != null)
{
sum += parent.offsetLeft + obj.clientLeft;
parent = parent.offsetParent;
}
return sum;
}
private static int FindPosY(HTMLAnchorElementClass obj)
{
int sum = obj.offsetTop + obj.clientTop+obj.offsetHeight;
IHTMLElement parent = obj.offsetParent;
while (parent != null)
{
sum += parent.offsetTop + obj.clientTop;
parent = parent.offsetParent;
}
return sum;
}


Win32API.RECT r = new Win32API.RECT();
int absoluteLeft = FindPosX(a);
int absoluteTop = FindPosY(a);
r.Left = absoluteLeft;
r.Right = absoluteLeft + (rect.right - rect.left);
r.Top = absoluteTop;
r.Bottom = absoluteTop + (rect.bottom - rect.top);

אני חושב שהOFFSET הוא מה שמסומן באדום: (מעין MARGIN אולי..)

אף אחד לא יודע איך אני יכול להוסיף את הOFFSET הזה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net