İyi günler. Aslında meseleyi ele alınca öncelikle bazı maddeleri çözme gereği görünüyor.
-ComboBox içindeki listedeki isimlere karşılık gelen değerleri elde etmek ve javascript kodlarını çalıştırmak gerekiyor ama sıralama aşağıdaki şekilde olmalı.
1-Ekrandaki bilgi girişi yapılan bileşenleri doldurmak
2-Önce il isminden değeri elde etmek,
3-Seçilen ile göre ilçeler ComboBox listesini doldurmak ve bu dolumdan sonra ilgili vergidairesini yine isminden değerini elde ederek seçmek. Burada il seçiminden sonra dolum işlemini
fillVDCombo('ortakDenemeIl3', 'ortakVdAdi') javascripti çalıştırılarak yapıldığı için bu scripti çalıştırmak gerekmektedir.
4-Bilgiler doldurulduktan sonra
girdiDenetleSorgu() isimli javascriptini çalıştırmakla işlem tamamlanacaktır.
Kod: Tümünü seç
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls,
OleCtrls, SHDocVw, MSHTML;//<--
.....
type
TForm1 = class(TForm)
Panel1: TPanel;
WB: TWebBrowser;
Panel2: TPanel;
btnGir: TBitBtn;
procedure btnGirClick(Sender: TObject);
procedure WBDocumentComplete(ASender: TObject; const pDisp: IDispatch; const URL: OleVariant);
private
{ Private declarations }
SayfaAcildi:Boolean;
procedure SayfaAcBekle(const Adresi:String;const ZamanAsimi:Cardinal=5000);
procedure SayfaDoldurSorgula(const document: IHTMLDocument2;const il,ilce:String);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnGirClick(Sender: TObject);
begin
SayfaAcBekle('https://intvd.gib.gov.tr/internetvd/template.jsp?page=IVD_VRG_LVH');
SayfaDoldurSorgula(WB.Document as IHTMLDocument2, 'ANTALYA', 'MURATPAŞA VD');
end;
procedure TForm1.SayfaAcBekle(const Adresi:String;const ZamanAsimi:Cardinal);
{$J+}
const Bitir:Boolean=False;
{$J-}
var OAn, AraSure, Sure:Cardinal;
begin
SayfaAcildi:=False;
WB.Navigate('https://intvd.gib.gov.tr/internetvd/template.jsp?page=IVD_VRG_LVH');
AraSure:=GetTickCount;
Sure:=AraSure+ZamanAsimi;
repeat
OAn:=GetTickCount;
if (OAn>(AraSure+450)) then begin
AraSure:=OAn;
Application.ProcessMessages;
Bitir:=Sure<OAn;
end;
until SayfaAcildi or (WB.ReadyState>=READYSTATE_COMPLETE) or {not WB.Busy or{} Bitir;
Bitir:=False;
end;
procedure TForm1.SayfaDoldurSorgula(const document: IHTMLDocument2;const il,ilce:String);
const _name='name';
var forms: IHTMLElementCollection;
function Eleman(Ozellik,Adi:String):IHTMLElement;
var i,j:Integer; xForm:IHTMLFormElement; elm:IHTMLElement;
begin
if Ozellik='' then Ozellik:=_name;
Result:=nil;
i:=0;
while not Assigned(Result) and (i<=forms.length) do begin
xForm:=forms.item(i,'') as IHTMLFormElement;
if Assigned(xForm) then begin
j:=0;
while not Assigned(Result) and (j<=xForm.length) do begin
elm:=xForm.item(j,'') as IHTMLElement;
if Assigned(elm) then begin
if Adi=elm.getAttribute(Ozellik,0) then
Result:=elm;
end;
Inc(j);
end;
end;
Inc(i);
end;
end;
function cmbDegerOku(const il_ilce:IHTMLSelectElement;const DegerAdi:String):String;
var i:Integer;
begin
Result:='';i:=0;
while (Result='') and (i<il_ilce.length) do begin
with (il_ilce.item(i,i) as IHTMLOptionElement) do
if DegerAdi=VarToStr(text) then Result:=value;
Inc(i);
end;
end;
var
theForm: IHTMLFormElement;
SelectElement:IHTMLSelectElement;
HTMLWindow: IHTMLWindow2;
begin
HTMLWindow := document.parentWindow;
forms := document.Forms as IHTMLElementCollection;
theForm := forms.Item(0,'') as IHTMLFormElement;
SelectElement:=(Eleman(_name, 'ortakDenemeIl3') as IHTMLSelectElement);
SelectElement.value := cmbDegerOku(SelectElement, il); //şehri seç
HTMLWindow.execScript('fillVDCombo(''ortakDenemeIl3'', ''ortakVdAdi'')', 'JavaScript');//ilçelerin doldurulması
(Eleman(_name,'ortakSorgulayanTckno') as IHTMLInputElement).value:='12345678901';//soran tcno
//(Eleman(_name,'ortakSorgulananVergiNo') as IHTMLInputElement).value:='9876543210';//sorgulanan vergino
(Eleman(_name,'ortakSorgulananTckno') as IHTMLInputElement).value:='12345678901';//sorgulanan tcno
SelectElement:=(Eleman(_name,'ortakVdAdi') as IHTMLSelectElement);
SelectElement.value := cmbDegerOku(SelectElement, ilce);//ilçeyi seç
HTMLWindow.execScript('girdiDenetleSorgu()', 'JavaScript');//sorgula
end;
procedure TForm1.WBDocumentComplete(ASender: TObject;
const pDisp: IDispatch; const URL: OleVariant);
begin
SayfaAcildi:=True;
end;
Burada butona tıklandığı zaman çağrılan aşağıdaki şekilde iki prosedür bulunmaktadır ve ne işe yaradıkları isimlerinden belli olmaktadır.
SayfaAcBekle prosedürü ile ilgili sorgulama sayfası açılır ve ekrana gelmesi tamamlanır.
Kod: Tümünü seç
SayfaAcBekle('https://intvd.gib.gov.tr/internetvd/template.jsp?page=IVD_VRG_LVH');
SayfaDoldurSorgula(WB.Document as IHTMLDocument2, 'ANTALYA', 'MURATPAŞA VD');
SayfaDoldurSorgula prosedürü ise aldığı
'ANTALYA', 'MURATPAŞA VD' değerlerine göre sayfadan seçim yaparak sorgulamayı tamamlamaktadır. Burada önemli olan nokta isimlerin, seçenek listesinde yazanla birebir aynı olması gerekmektedir. Buna dikkat edilirse pek sorun çıkmayacaktır. Bir de
SayfaDoldurSorgula prosedüründe diğer bilgileri de parametre olarak gönderebilirdik ama ComoBox değerlerini isimlerinden elde etmeye vurgu yapmak açısından diğer bilgileri parametre olarak kullanmadım. Eğer isterseniz diğer bilgileri de parametre olarak ekleyebilirsiniz. İyi çalışmalar.