PDA

View Full Version : کار با آبجکتهای صفحه وب فراخوانی شده



vahid64
سه شنبه 03 شهریور 1388, 11:06 صبح
سلام
من می خوام بدونم آیا میشه صفحه وبی که با webbrowser فراخوانی کردم با آبجکت هاش کار کنم؟
مثلاً کنترل کرسر رو ببرم رو یه ادیت ؟
و اینکه Title صفحه رو لازم دارم برای اینکه تشخیص بدم کدوم صفحه هستم الان ؟
برای این title اگه راه بهتری سراغ دارین بهم بگین!

ممنون

ghabil
سه شنبه 03 شهریور 1388, 20:13 عصر
آره میشه اگر بگردی علی کشاورز اگر اشتباه نکنم یکدفعه نحوه کار با اینترفیس HTML مایکروسافت رو قشنگ توضیح داده بود

vahid64
سه شنبه 03 شهریور 1388, 21:08 عصر
خیلی گشتم دوست عزیز ولی پیدا نمی کنم؟
شاید کلمه کلیدی هام برای جستجو صحیح نباشه!
کاش علی کشاورز میومد راهنمایی می کرد!

vahid64
چهارشنبه 04 شهریور 1388, 11:19 صبح
دوستان اگه واقعاً چنین چیزی موجود هست در سایت لطفاً کمک کنید پیداش کنیم
چون من دیگه همه مدل جستجویی انجام دادم!
در ضمن این مسئله رو واقعاً لازم دارم!

ghabil
جمعه 06 شهریور 1388, 02:18 صبح
ببین برو توی Project/Import Type Library بعد Microsoft HTML OBJECT LIBRARY رو انتخاب کن. بعد که ایمپورتش کردی TLBش رو توی USES ها استفاده کن بعد:


var
ADomDoc:IHTMLDocument2;
begin
ADomDoc:= WebBrowser.Document as IHTMLDocument2;


حالا این DOC یک HTMLDocument کامل هست با همه اجزای موجود داخاش که میتونی باهاش کار کنی

vahid64
جمعه 06 شهریور 1388, 21:27 عصر
دستورات زیادی برای کنترل و کار کردن با این Document هست من کلی جستجو کردم تو سایتهای خارجی
و چیزای زیادی پیدا کردم!
ولی متاسفانه اکثر کدها کدهایی هستند که با Ctrl+Space نمایش داده نمی شوند و باید خودمون بنویسیم!
ولی در کل تجربه جالبی به دست آوردم مثلاً برای Title صفحه وب از این کد میشه استفاده کرد!

Label1.caption := WebBrowser. OleObject. Document. Title


ممنون از راهنمایی هاتون!

vcldeveloper
شنبه 07 شهریور 1388, 00:18 صبح
ولی متاسفانه اکثر کدها کدهایی هستند که با Ctrl+Space نمایش داده نمی شوند و باید خودمون بنویسیم!
اگر از اون روشی که ghabil گفت، استفاده کنید، Code Insight دلفی هم کار میکنه. اون روشی که Code Insight کار نمیکنه موقعی هست که به جای Import کردن Type Library، از Variant استفاده بشه، که نتیجه اش میشه Late binding.

در هر حال، درباره همه خصوصیات و متدهای IHTMLDocument2 در MSDN توضیح داده شده.

mohammad_2oo5
دوشنبه 13 اردیبهشت 1389, 07:37 صبح
سلام زمانی که مثلا title را می گیرم فارسی ها را با علامت ؟؟؟؟ می نویسه چیکارکنم تا بصورت utf-8 و فارسی درست نمایش بده

سلام
lable را هم فونتش را روی Arabic قرار دادم ولی نشد

با سلام
لطفا اگر کسی جواب را می دونه پاسخ بده ممنون

vcldeveloper
دوشنبه 13 اردیبهشت 1389, 13:59 عصر
سلام زمانی که مثلا title را می گیرم فارسی ها را با علامت ؟؟؟؟ می نویسه چیکارکنم تا بصورت utf-8 و فارسی درست نمایش بده
چه نسخه ایی از دلفی؟ چه کدی نوشتید؟

mohammad_2oo5
دوشنبه 13 اردیبهشت 1389, 14:36 عصر
نسخه 7
بعد از اینکه در webbrowserسایت را لود کردم
var
ADomDoc:IHTMLDocument2;
begin
ADomDoc:= WebBrowser.Document as IHTMLDocument2;وبعد
Label1.caption := WebBrowser. OleObject. Document. Titleکه نهایتا چون فارسی title بود بصورت ??????? نوشته شده است (unicode مثل اینکه این دستورات جواب نمی ده)
باید چطور بنویسم تا بتونم هم سورس فایل و هم اجزای آن را بدست بیارم
البته تو اینترنت خیلی جستجو کردم و یک سورس هم پیدا کردم که unicode ذخیره می کند ولی زمانی که در یک meno نمایش می دهد کلمات فارسی نامفهوم هست

vcldeveloper
دوشنبه 13 اردیبهشت 1389, 15:07 عصر
Label1.caption := WebBrowser. OleObject. Document. Titleکه نهایتا چون فارسی title بود بصورت ??????? نوشته شده است
به خاطر اینکه Title یونیکد هست، ولی Label1.Caption یونیکد نیست. شما یک متغیر از نوع WideString تعریف کنید، و مقدار Title رو در اون بریزید. برای نمایش مقدار هم یا باید از کامپوننت های یونیکد مثل TNT استفاده کنید که یونیکد را پشتیبانی می کنند، یا متن یونیکد به دست آمده را به ANSI تبدیل کنید، و سپس در Label نمایش بدید. البته در صورت تبدیل به ANSI هم باید حتما CodePage فعال در سیستم تان فارسی باشه، تا درست نمایش داده بشه، وگرنه درست نشان داده نمیشه. پس یا از TNT Components برای نمایش استفاده کنید، یا برید سراغ دلفی 2009 یا 2010 که از یونیکد پشتیبانی می کنند.

mohammad_2oo5
سه شنبه 14 اردیبهشت 1389, 06:55 صبح
ممنون از جوابتون
امتحان می کنم ببینم چی میشه

mohammad_2oo5
سه شنبه 14 اردیبهشت 1389, 07:00 صبح
از TNT استفاده کردم جواب داد واقعا ممنون

mohammad_2oo5
سه شنبه 14 اردیبهشت 1389, 09:52 صبح
سلام
ببخشید از اینکه دوباره سئوال میکنم
در فرمها پیداکردن object ها کاری نداره و میشه با یک حلقه این کار را کرد
سئوال من اینکه چطور میشه در یک صفحه html ی content داخل صفحه در meta ها را گرفت مثلا

<meta name="description" content="****"
آیا دستوری هست که بشه content را در آورد
از کد پایین استفاده کردم جواب نمی ده

procedure TForm1.Button3Click(Sender: TObject);
var
All: IHTMLElementCollection;
Element: IHTMLElement;
Meta: IHTMLMetaElement;
I: Integer;
begin
All := (WebBrowser.Document as IHTMLDocument2).All;
for I := 0 to All.Length-1 do
begin
Element := All.item(I, varEmpty) as IHTMLElement;
if (Element <> nil) and (Element.Tagname='meta') then
begin
Meta := Element as IHTMLMetaElement;
TntMemo1.Lines.Add(Meta.httpEquiv);
if (Meta.httpEquiv = 'Keywords') then begin
TntMemo1.Lines.Add(Meta.content);
end else if (Meta.httpEquiv = 'Description') then begin
TntMemo1.Lines.Add(Meta.content);
end;
end;
end;
end;

mohammad_2oo5
سه شنبه 14 اردیبهشت 1389, 14:00 عصر
چرا کد بالا جواب نمی دهد؟
آیا کد بهتری می توانیم استفاده کنیم یا خیر؟

mohammad_2oo5
پنج شنبه 16 اردیبهشت 1389, 12:27 عصر
حل شد خداحافظ