Tutil !!

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Tutil !!

Mesaj gönderen ozcank »

Arkadaşlar bir button yardımı ile Tutil32.exe yi çalıştırıyorum fakat programdaki Table1 ve Table2 nin kapatılması gerekiyor işlem yapması için bunu nasıl çözeblirim aşağıda ki kod çalışıyor buraya ekleme yaparak halledebilirmiyim birde programa geri dönüldüğünde program Table1 ve Table2 açık olarak çalışmasına devam etmeli. Yardım ederseniz çok sevinirim herkese teşekkürler.

procedure TForm3.BitBtn7Click(Sender: TObject);
begin
if Application.MessageBox('Programda Index hatası, düzenleme yapmak için çalıştırılması gerekir.Bu işlemi Onaylıyormusunuz ?','UYARI',
Mb_YesNo+Mb_IconQuestion) = 6 then
WINEXEC('C:\PUNTASWIN\TUTIL32.EXE',SW_SHOW)
else Showmessage('İşlemi iptal ettiniz program çalışmaya devam edecektir.Kolay Gelsin');
end;
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhaba. anladığım kadarıyla mesajla vt ye bakım yaptıracaksın bı sırada da açık olan tabloların kapatılması gerekiyor. bunu için table nin olduğu formun onactive ve ondeactive eventlerine yazabilirisn. yani form dan bakım programını çalıştırdığında senin çalıştığın form deactive olacaktır. dolayısıyla buraya table1.close active olayınada tekrar table1.open ile işini halledersin. kolay gelsin..
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

procedure TForm3.BitBtn7Click(Sender: TObject);
begin
if Application.MessageBox('Programda Index hatası, düzenleme yapmak için çalıştırılması gerekir.Bu işlemi Onaylıyormusunuz ?','UYARI',
Mb_YesNo+Mb_IconQuestion) = 6 then
Form8.Table1.close;
Form7.Table1.close;
WINEXEC('C:\PUNTASWIN\TUTIL32.EXE',SW_SHOW)
else Showmessage('İşlemi iptal ettiniz program çalışmaya devam edecektir.Kolay Gelsin');
end;
bu şekilde yazdığım zaman Else de hata veriyor.
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

kardeş yukarıda mantık olarak yazdım. formun onactive ve ondeactive eventleri vardır bu evenlere yazarsan. problemin düzelir.

Kod: Tümünü seç

procedure TForm1.FormActivate(Sender: TObject);
begin
Table1.Open;
Table2.Open;
end;

procedure TForm1.FormDeactivate(Sender: TObject);
begin
Table1.Close;
Table2.Close;
end;
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam.
@kadirkurtoglu
- Soruda geçen bir button aracılığıyla bu işlemin yapıldığı, bir form açılıyor da bu işlem yapılıyor olsaydı dediğiniz şekilde gerçekleşmesi mümkündü.

@ozcank
- Çözüm için yazmıyorum aradaki else hatası için yazıyorum...

- Then'den sonra begin..end şeklinde bir blok açmazsanız sadece ilk satır işleme alınır.

Kod: Tümünü seç

procedure TForm3.BitBtn7Click(Sender: TObject);
begin
  if Application.MessageBox('Programda Index hatası, düzenleme yapmak için çalıştırılması gerekir.Bu işlemi Onaylıyormusunuz ?','UYARI',
  Mb_YesNo+Mb_IconQuestion) = 6 then
  begin
    Form8.Table1.close;
    Form7.Table1.close;
    WINEXEC('C:\PUNTASWIN\TUTIL32.EXE',SW_SHOW);
  end
  else Showmessage('İşlemi iptal ettiniz program çalışmaya devam edecektir.Kolay Gelsin');
end;
- Şimdi çözüm için yazıyorum WinExec ile dos uygulaması çalıştırdığınızda, bu çalıştırdığınız programın işlemesinin sona ermesi beklenmez... Bunun için aşağıdaki fonksiyonu veya benzerini kullanın...

- Kullanımı benzer.

Kod: Tümünü seç

    CreateProcessAndWait('C:\PUNTASWIN\TUTIL32.EXE', '', SW_SHOW);

Kod: Tümünü seç

function CreateProcessAndWait(AppPath, AppParams: String; Visibility: word): DWord;
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  Proc: THandle;
begin
  FillChar(SI, SizeOf(SI), 0);
  SI.cb := SizeOf(SI);
  SI.wShowWindow := Visibility;
  if not CreateProcess(PChar(AppPath), PChar(AppParams), Nil, Nil, False,
                   Normal_Priority_Class, Nil, Nil, SI, PI) then
    raise Exception.CreateFmt('Failed to execute program.  Error Code %d',
                              [GetLastError]);
  Proc := PI.hProcess;
  CloseHandle(PI.hThread);
  if WaitForSingleObject(Proc, Infinite) <> Wait_Failed then
    GetExitCodeProcess(Proc, Result);
  CloseHandle(Proc);
end;
Resim
Resim ....Resim
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhaba

@mrmcop demişki
Soruda geçen bir button aracılığıyla bu işlemin yapıldığı, bir form açılıyor da bu işlem yapılıyor olsaydı dediğiniz şekilde gerçekleşmesi mümkündü.

Kod: Tümünü seç

WINEXEC('C:\PUNTASWIN\TUTIL32.EXE',SW_SHOW);
hocam bu tutil32.exe yukarıda show ediliyor ve burda sanırım bizim formumuz deactive oluyor. çünkü tutil32.exe aktif hale geliyor. butona tıklanarak yapıldığını biliyorum.
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.

Mevlana

OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

index hatasımı var viewtopic.php?p=17818#17818

bde ile tUtile gerek kalmadan düzeltilir viewtopic.php?p=9904#9904
.-.-.-.-.-.-.-. ^_^
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

@kadirkurtoglu;

Formun deactive olması kendi projenizde başka bir form çağırdığınızda olur..Bahsettiğiniz olay için activewindow apisi (yanlış hatırlamıyorsam apiydi..) kullanılır.

Kolay gelsin.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

Bu şekilde Tutil32.exe calıştı fakat işlem bittikten sonra geri dönüşte
Form8.Table1.Open;
Form8.Table1.Open; nasıl yapabilirim?


begin
if Application.MessageBox('Programda Index hatası, düzenleme yapmak için çalıştırılması gerekir.Bu işlemi Onaylıyormusunuz ?','UYARI',
Mb_YesNo+Mb_IconQuestion) = 6 then
begin
Form8.Table1.close;
Form7.Table1.close;
WINEXEC('C:\PUNTASWIN\TUTIL32.EXE',SW_SHOW);
end
else Showmessage('İşlemi iptal ettiniz program çalışmaya devam edecektir.Kolay Gelsin');
end;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Mesajda bahsetmeye çalıştığım konu buydu... TUtil işlemini bitirene kadar projenin beklemede kalmasını sağlamak gerekiyor. WinExec ile bunu yapamazsınız. Programı çalıştırır ve hemen bir alttaki satırdan yoluna devam eder.

- Sizin yapacağınız, WinEXEC ile çalıştırdığınız bu programı takibe alıp bittiğini tespit ettiğinizde kaldığınız yerden devam etmesini sağlamalısınız..

- Bunu yapan tek fonksiyon olmasa da başarılı bulduğum olan CreateProcessAndWait fonksiyonunudur.

- Yani şu...

Kod: Tümünü seç

function CreateProcessAndWait(AppPath, AppParams: String; Visibility: word): DWord;
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  Proc: THandle;
begin
  FillChar(SI, SizeOf(SI), 0);
  SI.cb := SizeOf(SI);
  SI.wShowWindow := Visibility;
  if not CreateProcess(PChar(AppPath), PChar(AppParams), Nil, Nil, False,
                   Normal_Priority_Class, Nil, Nil, SI, PI) then
    raise Exception.CreateFmt('Failed to execute program.  Error Code %d',
                              [GetLastError]);
  Proc := PI.hProcess;
  CloseHandle(PI.hThread);
  if WaitForSingleObject(Proc, Infinite) <> Wait_Failed then
    GetExitCodeProcess(Proc, Result);
  CloseHandle(Proc);
end;

procedure TForm3.BitBtn7Click(Sender: TObject);
begin
  if Application.MessageBox('Programda Index hatası, düzenleme yapmak için çalıştırılması gerekir.Bu işlemi Onaylıyormusunuz ?','UYARI',
     Mb_YesNo+Mb_IconQuestion) = 6 then
  begin
    Form8.Table1.close;
    Form7.Table1.close;
    CreateProcessAndWait('C:\PUNTASWIN\TUTIL32.EXE', '', SW_SHOW);
    Form8.Table1.Open;
    Form7.Table1.Open;
  end
  else Showmessage('İşlemi iptal ettiniz program çalışmaya devam edecektir.Kolay Gelsin');
end;
Resim
Resim ....Resim
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Mesaj gönderen ozcank »

mrmcop çok teşekkür ederim yazdığınız kod işimi cözdü.
Cevapla