Bir uygulamayi kendi programimiz icinde calistirma,

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Bir uygulamayi kendi programimiz icinde calistirma,

Mesaj gönderen Burhan_ast »

Merhabalar,

Arkadaslar X bir program mevcut bu programi kendi programim icinde bir panel'e load edip calistirmam mumkunmu, yani TFrame nesnesi gibi dusunun uygulama kendi programim icinde bir panelde gozukecek,

Burhan Cakmak
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

dll olsa arabirim yazmak mümkün derdim ancak bana çok mumkun görünmedi bu dediğiniz. Sonuçta winexec yada shellexecute dediğiniz anda uygulama kendi formunu açaçak.

ha ama oturupta işletim sistemi dışında exeyi yürütmeyi emule edecek başlıca bir sistem geliştirirseniz neden olmasın. bu dediğimi yapacak adamda sanırım tr de en fazla 3-5 kişi çıkar.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@Burhan_ast

- Bu istediğin mümkün. Çalıştırdığın programın handle numarasını FindWindow ile bulduktan sonra

Kod: Tümünü seç

SetParent( FindWindowileBuldugunHandle, ProgramindakiPanel.Handle);
şeklinde bir komutla kendi projendeki bir panel veya forma aktarabilirsin. Bundan sonra ilgili yazılım kapatılana kadar bu aktarıldığı sınırlar içinden dışarı çıkamaz.
Resim
Resim ....Resim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Muharrem hoca daha önce burada çözümü vermişti :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

mrmarman yazdı:@Burhan_ast

- Bu istediğin mümkün. Çalıştırdığın programın handle numarasını FindWindow ile bulduktan sonra

Kod: Tümünü seç

SetParent( FindWindowileBuldugunHandle, ProgramindakiPanel.Handle);
şeklinde bir komutla kendi projendeki bir panel veya forma aktarabilirsin. Bundan sonra ilgili yazılım kapatılana kadar bu aktarıldığı sınırlar içinden dışarı çıkamaz.
bunu bilmiyordum. Öğrenmiş oldum.

peki çalıştırdığı exe show modal bir form gösterirse ne olacak. yani MDI form olarak söylediğin yapıyı canlandırabiliyorum ama genelde çoğu kişi modal tarz formlarla uygulama geliştiriyor ?
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Denemesi bedava :wink: Bir örnek yapıp burada bildirebilirsin.
Resim
Resim ....Resim
Kullanıcı avatarı
kara_kule06
Üye
Mesajlar: 150
Kayıt: 18 Nis 2006 02:15
Konum: ankara/polatlı
İletişim:

Mesaj gönderen kara_kule06 »

Form1 e bir adet buton ekleyin ve click olayına;

Kod: Tümünü seç

Windows.SetParent(FindWindow('SciCalc',nil),Form1.Handle);
yazın. Ardından Windowsun Hesap makinesi Programını çalıştırın ve form1 deki butona basın. göreceksiniz çok yaralı bişey. Özellikle benim işime çok yarıyacağı kesin. :)

Teşekkürler Muharrem Hoca :wink:
İlim öğrenmek akıntıya karşı yüzmek gibidir. Ara verildiği zaman gerilenir...
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Kod calisiyor ama sadece hesap makinasi icin calisti

Mesaj gönderen Burhan_ast »

Merhabalar

Kod: Tümünü seç

Windows.SetParent(FindWindow('SciCalc',nil),Form1.Handle);
kod gayet guzel calisiyor veya asagidaki kodda guzel calisiyor

Kod: Tümünü seç

Var
  Handle : THandle;
begin
//  WinExec('calc.exe', SW_SHOWNORMAL);
  Handle := FindWindow('SciCalc', Nil);
  Windows.Setparent( Handle, putty.Handle );
  SetWindowPos(Handle, HWND_BOTTOM, 0, 0, 400, 200, 0);
Fakat soyle bir sorun var daha dogrusu ben Logo Unity veya Logo Tiger programini bu sekilde yapmak istiyorum ama malesef olmadi,

Kod: Tümünü seç

Windows.SetParent(FindWindow('TIGER',nil),Form1.Handle);
Seklinde denedim olmadi

Kod: Tümünü seç

Windows.SetParent(FindWindow('LENGINE1',nil),Form1.Handle);
malesef buda olmadi,

saygilar...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Logo Unity veya Logo Tiger 'ın formunun handle'ini bulabilmen için pencere başlığını ve/veya pencere sınıfını bilmen gerekir. Bunun için WinSight gibi bir program kullanabileceğin gibi aşağıda vereceğim pencerelerin sınıf isimleri ve başlık bilgilerini listeleyen kodu uygulayacağın bir tali projeden de yardım alabilirsin. Bu koddaki parantez içinde göreceğin veri ClassName bilgisidir.

Kod: Tümünü seç

Procedure CalisanProgramlar( Liste:TStrings );
Var
  Hand      : THandle;
  Baslik,
  Sinif : array[0..255] of char;
begin
  Liste.Clear;
  Hand := Application.Handle;
  while ( Hand > 0 ) do begin
    GetWindowText(Hand, Baslik    ,255);
    GetClassName (Hand, Sinif,255);
    If IsWindowVisible(Hand) or IsIconic(Hand) then
      Liste.Add( Format('%.8d:(%s) %s', [Hand, Sinif, Baslik]) );
    Hand := GetnextWindow(Hand, GW_HWNDNEXT);
  end; // While
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Liste : TStringList;
begin
  Liste := TStringList.Create;
  CalisanProgramlar( Liste );
  ShowMessage(  Liste.Text );
  Liste.Free;
end;
Resim
Resim ....Resim
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

TAplication seklinde bir bilgi geldi

Mesaj gönderen Burhan_ast »

Merhaba

01182030 : (SciCalc) Calculator
00657284 : (TAplication) TIGER

seklinde bir sonuc geldi, malesef TIGER v.s. seklinde olmadi,

tsk
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

işte sonuç almışsın. (application'u yanlış yazmışsın, aynı gördüğün şekilde yazarsan sonuç da alırsın) Diyeceksin ki

Kod: Tümünü seç

Windows.SetParent( FindWindow( PChar('TApplication'), Pchar('TIGER')) ,Form1.Handle); 
Resim
Resim ....Resim
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Kod calisti fakat

Mesaj gönderen Burhan_ast »

Merhaba

Tesekkur ederim kod calisti fakat,

Kod: Tümünü seç

Windows.Setparent( FindWindow( PChar('TApplication'), Pchar('TIGER')), Panel1.Handle );
seklinde yazdim fakat malesef Tiger :) kendi kafasina gore hareket ediyor hesap makinasinda oldugu gibi Panelin icine hapis olmuyor

tsk...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Açılan penecereleri de kapabilirsin. Yapacağın tek şey alttaki pencerelerin de handle nolarını tespit mekanizması kurmak. Bir timer ile bunları dizginleyebilirsin. Ancak merak ettiğim bir husus var. Neden böyle bir yola başvuruyorsun ??? Boşuna vakit kaybediyorsun gibi geliyor tabi yol göstermek bizden uygulama kararı ve kararlılığı sizden, ona diyecek lafım yok.
Resim
Resim ....Resim
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Evet sanirim haklisiniz,

Mesaj gönderen Burhan_ast »

Merhabalar,

Sanirim haklisiniz bosuna vakit kaybi olacak gibi, sebep su Tiger'a entegre bir rapor yazilimimiz var ve ayri bir program yaklasik 40-50 tane ozel rapor mevcut ve Fast Script ile kullanici program icinde kendi rapor yazabiliyor ve istedigi raporu yine scripte entegre ettigimiz excel componenti ile excele rapor alabiliyor veya mail atabiliyor v.s., tiger'i bu sekilde birlestirmek sureti ile surekli ekranlar arasinda gecisi onlemek istiyordum,

Saygilar

Burhan Cakmak
Cevapla