s.mostafa.rahmani
چهارشنبه 30 مرداد 1387, 18:12 عصر
اگه شما روي فرمتون در دلفي يك كنترل WebBrowser داشته باشيد و در اون يك صفحه رو باز كرده باشيد، و اون فرم وب شامل يك يا چند فرم باشه، با كدهاي زير ميتونيد كنترلهاي اون فرم وب رو مقدار دهي و همچنين اون فرم وب رو Submit كنيد:
با اين پروسيجر ميتونيد يك كنترل (فيلد) خاص رو از يك فرم مقداردهي كنيد:
procedure WebFormSetFieldValue(const document: IHTMLDocument2;
const formNumber: integer;
const fieldName, newValue: string) ;
var
form : IHTMLFormElement;
field: IHTMLElement;
begin
form := WebFormGet(formNumber, document) ;
field := form.Item(fieldName,'') as IHTMLElement;
if field = nil then Exit;
if field.tagName = 'INPUT' then
(field as IHTMLInputElement).value := newValue
else
if field.tagName = 'SELECT' then
(field as IHTMLSelectElement).value := newValue
else
if field.tagName = 'TEXTAREA' then
(field as IHTMLTextAreaElement).value := newValue;
end;البته تابع WebFormGet كه در پروسيجر بالا به كار برده شده، اين شكليه:
function WebFormGet(const formNumber: Integer;
const document: IHTMLDocument2): IHTMLFormElement;
var
forms: IHTMLElementCollection;
begin
forms := document.forms as IHTMLElementCollection;
Result := forms.item(formNumber, '') as IHTMLFormElement;
end;
و نحوه استفاده:
WebFormSetFieldValue((WebBrowser1.Document as IHTMLDocument2), 0, 'q', 'test');پارامتر اول كه Document كنترل WeBrowserتون رو ارسال ميكنه، پارامتر دوم شماره فرم وب هست، اگه صفحه باز شده در WebBrowser فقط يك فرم داشته باشه شمارهاش صفره و اگه بيشتر شمارهاش هم بيشتر ميشه (از صفر شروع ميشه).
پارامتر سوم، اسم كنترل هست. مثلاً در فرم صفحه اول سايت گوگل، كنترلي كه داخلش متن رو براي جستجو تايپ ميكنيد اسمش q است.
و پارامتر آخر مقداريه كه بايد داخل اون كنترل قرار بگيره.
اما نحوه Submit كردن فرم:
form := WebFormGet(0, WebBrowser1.Document AS IHTMLDocument2);
form.submit;
مشخصه كه اون صفر شماره فرمه، (يعني اگه بيشتر از يك فرم داشتيد بايد شماره فرم مورد نظر رو به جاي صفر قرار بديد).
ضمن اينكه اين متغير form از نوع IHTMLFormElement هست.
اما يك تابع براي اينكه اسم كنترلهاي فرم وب رو بتونيد بدست بياريد:
function WebFormFields(wBrowser: TWebBrowser;
const formNo: Integer): TStringList;
var
form: IHTMLFormElement;
field: IHTMLElement;
fName: string;
idx : integer;
begin
form := WebFormGet(formNo, wBrowser.Document as IHTMLDocument2);
Result := TStringList.Create;
for idx := 0 to form.length - 1 do
begin
field := form.item(idx, '') as IHTMLElement;
if field = nil then
Continue;
fName := field.id;
if field.tagName = 'INPUT' then
fName := (field as IHTMLInputElement).name
else
if field.tagName = 'SELECT' then
fName := (field as IHTMLSelectElement).name
else
if field.tagName = 'TEXTAREA' then
fName := (field as IHTMLTextAreaElement).name;
Result.Add(fName);
end;
end;
و البته حتماً ميخواهيد كه اسامي فرمهاي داخل صفحه وب رو هم داشته باشيد. شايد اون صفحه بيشتر از يك فرم داشته باشه:
function WebFormNames(const document: IHTMLDocument2): TStringList;
var
forms: IHTMLElementCollection;
form: IHTMLFormElement;
idx: Integer;
begin
forms := document.forms as IHTMLElementCollection;
Result := TStringList.Create;
for idx := 0 to forms.length - 1 do
begin
form := forms.item(idx, 0) as IHTMLFormElement;
Result.Add(form.name);
end;
end;
همون طور كه ميبينيد كه مقداري كه دو تابع آخر برميگردونن از نوع TStringList هست، ميتونيد اونها رو به شكل زير به Memo نسبت بديد:
ابتدا در قسمت var يك متغير از نوع TStringList تعريف كنيد:
Str: TStringList;
حال در يك پروسيجر مثلاً در OnClick يك Button بنويسيد:
Str := WebFormFields(WebBrowser1, 0);
Memo1.Lines.Assign(Str);
منبع: delphi.about.com
.
با اين پروسيجر ميتونيد يك كنترل (فيلد) خاص رو از يك فرم مقداردهي كنيد:
procedure WebFormSetFieldValue(const document: IHTMLDocument2;
const formNumber: integer;
const fieldName, newValue: string) ;
var
form : IHTMLFormElement;
field: IHTMLElement;
begin
form := WebFormGet(formNumber, document) ;
field := form.Item(fieldName,'') as IHTMLElement;
if field = nil then Exit;
if field.tagName = 'INPUT' then
(field as IHTMLInputElement).value := newValue
else
if field.tagName = 'SELECT' then
(field as IHTMLSelectElement).value := newValue
else
if field.tagName = 'TEXTAREA' then
(field as IHTMLTextAreaElement).value := newValue;
end;البته تابع WebFormGet كه در پروسيجر بالا به كار برده شده، اين شكليه:
function WebFormGet(const formNumber: Integer;
const document: IHTMLDocument2): IHTMLFormElement;
var
forms: IHTMLElementCollection;
begin
forms := document.forms as IHTMLElementCollection;
Result := forms.item(formNumber, '') as IHTMLFormElement;
end;
و نحوه استفاده:
WebFormSetFieldValue((WebBrowser1.Document as IHTMLDocument2), 0, 'q', 'test');پارامتر اول كه Document كنترل WeBrowserتون رو ارسال ميكنه، پارامتر دوم شماره فرم وب هست، اگه صفحه باز شده در WebBrowser فقط يك فرم داشته باشه شمارهاش صفره و اگه بيشتر شمارهاش هم بيشتر ميشه (از صفر شروع ميشه).
پارامتر سوم، اسم كنترل هست. مثلاً در فرم صفحه اول سايت گوگل، كنترلي كه داخلش متن رو براي جستجو تايپ ميكنيد اسمش q است.
و پارامتر آخر مقداريه كه بايد داخل اون كنترل قرار بگيره.
اما نحوه Submit كردن فرم:
form := WebFormGet(0, WebBrowser1.Document AS IHTMLDocument2);
form.submit;
مشخصه كه اون صفر شماره فرمه، (يعني اگه بيشتر از يك فرم داشتيد بايد شماره فرم مورد نظر رو به جاي صفر قرار بديد).
ضمن اينكه اين متغير form از نوع IHTMLFormElement هست.
اما يك تابع براي اينكه اسم كنترلهاي فرم وب رو بتونيد بدست بياريد:
function WebFormFields(wBrowser: TWebBrowser;
const formNo: Integer): TStringList;
var
form: IHTMLFormElement;
field: IHTMLElement;
fName: string;
idx : integer;
begin
form := WebFormGet(formNo, wBrowser.Document as IHTMLDocument2);
Result := TStringList.Create;
for idx := 0 to form.length - 1 do
begin
field := form.item(idx, '') as IHTMLElement;
if field = nil then
Continue;
fName := field.id;
if field.tagName = 'INPUT' then
fName := (field as IHTMLInputElement).name
else
if field.tagName = 'SELECT' then
fName := (field as IHTMLSelectElement).name
else
if field.tagName = 'TEXTAREA' then
fName := (field as IHTMLTextAreaElement).name;
Result.Add(fName);
end;
end;
و البته حتماً ميخواهيد كه اسامي فرمهاي داخل صفحه وب رو هم داشته باشيد. شايد اون صفحه بيشتر از يك فرم داشته باشه:
function WebFormNames(const document: IHTMLDocument2): TStringList;
var
forms: IHTMLElementCollection;
form: IHTMLFormElement;
idx: Integer;
begin
forms := document.forms as IHTMLElementCollection;
Result := TStringList.Create;
for idx := 0 to forms.length - 1 do
begin
form := forms.item(idx, 0) as IHTMLFormElement;
Result.Add(form.name);
end;
end;
همون طور كه ميبينيد كه مقداري كه دو تابع آخر برميگردونن از نوع TStringList هست، ميتونيد اونها رو به شكل زير به Memo نسبت بديد:
ابتدا در قسمت var يك متغير از نوع TStringList تعريف كنيد:
Str: TStringList;
حال در يك پروسيجر مثلاً در OnClick يك Button بنويسيد:
Str := WebFormFields(WebBrowser1, 0);
Memo1.Lines.Assign(Str);
منبع: delphi.about.com
.