merhabalar,
bir stringgridde buyuk bir verim var ve bunu en son savedialog componenti ile dosyaya excel olarak save ediyorum. Fakat excel dosyasi yaratilip ici doldurulurken bayagi bir bekleme surem oluyor. buda bazen beni acaba sistemde bir kilitlenme mi oldu sorusuna goturuyor. Oysa zaman alan bir is. Bu zaman alan save etme esnasinda %sukadari bitti gibi bir component varmi. sanirim tspeedbutton bu is icin ama bu butonu bu tip bir ornekde nasil kullanirim. buna uygun bir kod varmi veya bu ornegi yapan bir site ornegi biliyormusunuz.
simdiden tesekkur ederim...
file save ederken tspeedbutton nasil kullanilabilir
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: file save ederken tspeedbutton nasil kullanilabilir
tspeedbutton bu işe yaramaz en azından ben öyle biliyorum.
3. parti Savedialoglarda işlem hacmi ve kayıt durumunu gösterenler olabilir.
3. parti Savedialoglarda işlem hacmi ve kayıt durumunu gösterenler olabilir.
Bir kelimenin anlamını öğretsen bile yeter..



Re: file save ederken tspeedbutton nasil kullanilabilir
s.a.
bunun için hazır bir bileşen yok. kendiniz yapacaksınız.
forma bir panel içinede bir progressbar (veya gauge) koy.
excele aktarma işlemi başladığı zaman progres barın max valuesini strgingridin satır sayısını ata. her satır işleminden sonrada progress ini bir arttır.
kolay gelsin.
bunun için hazır bir bileşen yok. kendiniz yapacaksınız.
forma bir panel içinede bir progressbar (veya gauge) koy.
excele aktarma işlemi başladığı zaman progres barın max valuesini strgingridin satır sayısını ata. her satır işleminden sonrada progress ini bir arttır.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: file save ederken tspeedbutton nasil kullanilabilir
peki bu durumda forumda bir panel1 ve uzerinde progressbar1 olusturdum. ama bunu asagida ki kodlarda cagiramiyorum sebep ise ben excele sg2 stringgridini doldururken bunu function cagirarak yapmistim. sayet function icerisinde bir yerde progressbar1.max demeye calistigim anda zaten delphi bana bunu function icerisinde tanimlayamadigindan oturu hata veriyor. bunu sizce nasil duzeltebilirim?
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
begin
savedlg1.Execute();
panel1.Visible:=True;
Progressbar1.Visible:=True;
If SaveAsExcelFile(sg2,savedlg1.FileName) then
ShowMessage('StringGrid saved!');
end;
Kod: Tümünü seç
//to excel
function SaveAsExcelFile(StringGrid: TStringGrid; FileName: string):boolean;
const
xlWBATWorksheet = -4167;
var
Row, Col: integer;
GridPrevFile: string;
XLApp, Sheet: OLEVariant;
begin
Result := false;
XLApp := CreateOleObject('Excel.Application');
try
XLApp.Visible := False;
XLApp.Workbooks.Add(xlWBatWorkSheet);
Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet.Name := 'My Sheet Name';
for col := 0 to StringGrid.ColCount - 1 do
for row := 0 to StringGrid.RowCount - 1 do
Sheet.Cells[row + 1,col + 1] := StringGrid.Cells[col, row];
try
XLApp.Workbooks[1].SaveAs(FileName);
Result := True;
except
// Error ?
end;
finally
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
end;
end;
end;
// finished to excell
Re: file save ederken tspeedbutton nasil kullanilabilir
SaveAsExcelFile fonksiyonunun tanımını TForm1 içinde yaparsanız form1de bulunan nesnelere fonksiyondan erişebilirsiniz...
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Re: file save ederken tspeedbutton nasil kullanilabilir
İşin sırrı Application.ProcessMessages komutunda. Siz bir döngü içerisinde işi yaptırırken program windows mesajlarına yani mouse tıklaması, görüntüsü değişen progressbar ın görüntüsünün güncellenmesi gibi eyemlere cevap vermeyi durdurur. Kuyrukta biriken mesajlara cevap vermesi için Application.ProcessMessages komutunu kullanmanız gerekir. Şimdi kodumuzu biraz gözden geçirelim.
Kod: Tümünü seç
//to excel
//Öncelikle SaveAsExcelFile fonksiyonu Form1'in bir methodu olmalı. Aynı başlığı Form1 in
// private bölüme eklemeyi unutmayın. Veya otomaik eklenmesini istiyorsanız SaveAsExcelFile
// in başına Form1. ekledikten sonra Ctrl + Shift + C tuşlarına basın.
function Form1.SaveAsExcelFile(StringGrid: TStringGrid; FileName: string):
boolean;
const
xlWBATWorksheet = -4167;
var
Row, Col: integer;
GridPrevFile: string;
XLApp, Sheet: OLEVariant;
begin
if Tag = 1 then // Zaten işlem içindeysek ve tuşa 2. kez basıldıysa.
begin
Tag = 0;
Exit;
end;
Tag := 1; // işlemin içindeyiz.
Result := false;
XLApp := CreateOleObject('Excel.Application');
try
XLApp.Visible := False;
XLApp.Workbooks.Add(xlWBatWorkSheet);
Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet.Name := 'My Sheet Name';
for col := 0 to StringGrid.ColCount - 1 do
begin
for row := 0 to StringGrid.RowCount - 1 do
begin
Sheet.Cells[row + 1, col + 1] := StringGrid.Cells[col, row];
// Bu komutu program donmasın mouse a cevap versn diye koyoyoruz.
Application.ProcessMessages;
end;
// Butona 2. kez basılmış ve bunun sonucunda işlem
// durdurulmuşsa döngüyü durdur.
if Tag = 0 then Break;
end;
try
if Tag = 0 then // yapılabilir veya yapılmayabilir.
XLApp.Workbooks[1].SaveAs(FileName);
Result := True;
except
// Error ?
end;
finally
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
end;
end;
Tag := 0; // işlemin bitti.
end;
// finished to excell
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)