Bu konulara benzer forumda 4 konu buldum ama istediğim sonuçlar yok,
SORUM: olecontainer e word sayfası açarak burada yazılmak istenenleri yazıp save ettim. Yazılanlar olecontainer içerisine geldi.
Şimdi olecontainerdeki bu uygulamayı image nesnesinin içerisine resim olarak koyalım;
Sonra da resim olarak veritabanına ve ayrıca da doc olarak veritabanına nasıl kayıt edebiliriz.
Yine düzenleme için açmak istediğimizde yine resim ve doc olarak işlem yapabilelim....Bir haftadır uğraşıyorum...
Yardımlarınızı bekliyorum. Herkesten Allah razı olsun.......
Olecontainer de görüntüyü image ve doc olarak FB e kaydetmek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Olecontainer de görüntüyü image ve doc olarak FB e kaydetmek
En son menderes tarafından 19 Eki 2005 06:44 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Ben uzun aramalar ve denemelerden sonra bir şeylere ulaşabildim, bunu da paylaşmak isterim belki bir arkadaşın işine yarar.
Şimdilik, OleContainer 'e word den gelen bilgiyi veritabanına (FireBird) kayıt edip tekrar işlemek ve düzeltmek için veritabanından çağırma işlemini yapabildim. Daha sonra resim olarak kaydetme işinide az kaldı yapacağım inşaallah...
Şurdan başlayalım
Bu linke tıkladığınızda direkt (olecontaineri word olarak ayarladığınızı ve ben AllowActiveDoc=False , AllowInPlace=False yaptım ki word ayrı bir sayfada karşıma çıksın.
Word uygulamasına birşeyler yazıp çizip kaydet deyip çıktık, Burada yaptığımız işlemler formumuzda bulunan olecontainer1 içerisine geldi...
Şimdi bu içerisindeki bilgileri veritabanımıza (Firebird - Blob alan) kaydediyoruz.
Şimdide veritabanından bu dosyayı çağıralım ve wordde tekrar düzenleme yapalım.
//evet düzenleme yapabiliyoruz. Veritabanına kayıt için yukarıda insert yerine edit yapalım....
Yani;
Aramalarımda word dosyasının veritabanına kayıtı olmaz falan gibi bir şeyler deniliyordu... Acaba arkadaşlar bu yaptığım işlemde bir yanlışlık varmı yokmu veya başka bir öneriniz varmı,
Birde Firebird de TBlobStream kullanamadım, BDE de oluyor. DBTable usese eklenirse, ben BDE kullanmıyorum. FireBird de TBlobstream yerine ne kullancağım şu an bilmiyorum, Artık deneyeceğiz, sorum da bir tek resim olarak kaydetme kaldı onuda hallederiz herhalde......Forumda benzer blob alan ile ilgili açıklamalar vardı ama onları tutturamadım..
Firebirdd e yukarıdaki işlemin devamı olarak resim kaydetme ile ilgili örnek verecek bir arkadaş varsa lütfen bekliyorum....
Şimdiden teşekkür ederim.....
Şimdilik, OleContainer 'e word den gelen bilgiyi veritabanına (FireBird) kayıt edip tekrar işlemek ve düzeltmek için veritabanından çağırma işlemini yapabildim. Daha sonra resim olarak kaydetme işinide az kaldı yapacağım inşaallah...
Şurdan başlayalım
Kod: Tümünü seç
//OleContainer in olduğu forma linkleyelim....
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
Form2.OleContainer1.DoVerb(ovShow);
Form2.ShowModal;
end;
Word uygulamasına birşeyler yazıp çizip kaydet deyip çıktık, Burada yaptığımız işlemler formumuzda bulunan olecontainer1 içerisine geldi...
Şimdi bu içerisindeki bilgileri veritabanımıza (Firebird - Blob alan) kaydediyoruz.
Kod: Tümünü seç
procedure TForm2.BitBtn6Click(Sender: TObject);
var
Buf : String;
Uzunluk : Integer;
TempStream : TMemoryStream;
begin
dm.TSORU.Open; // dm - DataModule ye verilen name - isim
dm.TSORU.Insert; // TSORU ise IBTable mize verdiğimiz isim
TempStream := TMemoryStream.Create;
OleContainer1.SaveToStream( TempStream );
TempStream.Position := 0;
Uzunluk := TempStream.Size;
SetLength(Buf,Uzunluk+1);
TempStream.Read(Buf[1],Uzunluk);
dm.TSORU.FieldValues['RDOS']:=Buf;// RDOS blob alan ismi
dm.TSORU.Post;
TempStream.Free;
end;
// TSORU tablesiyle ilgili yaptıklarımı da yazayım da belki eleştiri gelir.
procedure Tdm.TSORUBeforeOpen(DataSet: TDataSet);
begin
if not IBDatabase1.Connected=True then
IBDatabase1.Connected:=True;
if IBTransaction1.Active=False then
IBTransaction1.Active:=True;
end;
procedure Tdm.TSORUAfterPost(DataSet: TDataSet);
begin
TSORU.ApplyUpdates;
IBTransaction1.CommitRetaining;
end;
// insert esnasında otomatik artan için sp yi tetikleyelim...
procedure Tdm.TSORUBeforePost(DataSet: TDataSet);
begin
IF (TSORU.State=dsInsert) AND (TSORU.FieldByName('SORU_ID').IsNull) then
begin
TSORU.FieldByName('SORU_ID').AsInteger:=0;
IbStoredProc2.Prepare;
IbStoredProc2.ExecProc;
TSORU.FieldByName('SORU_ID').AsInteger:=IbStoredProc2.ParamByName('ID').AsInteger;
end;
end;
Kod: Tümünü seç
procedure TForm2.BitBtn8Click(Sender: TObject);
var
Buf : String;
Uzunluk : Integer;
TempStream : TMemoryStream;
begin
TempStream := TMemoryStream.Create;
Buf:=dm.TSORU.FieldValues['RDOS'];
Uzunluk := Length(Buf);
TempStream.SetSize(Uzunluk+1);
TempStream.Write(Buf[1],Uzunluk);
TempStream.Position := 0;
OleContainer1.LoadFromStream( TempStream );
TempStream.Free;
end;
//ve
//tekrar wordde düzenleme yapalım
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
OleContainer1.DoVerb(ovShow);
end;
Yani;
Kod: Tümünü seç
procedure TForm2.BitBtn9Click(Sender: TObject);
var
Buf : String;
Uzunluk : Integer;
TempStream : TMemoryStream;
begin
dm.TSORU.Open;
dm.TSORU.Edit;
TempStream := TMemoryStream.Create;
OleContainer1.SaveToStream( TempStream );
TempStream.Position := 0;
Uzunluk := TempStream.Size;
SetLength(Buf,Uzunluk+1);
TempStream.Read(Buf[1],Uzunluk);
dm.TSORU.FieldValues['RDOS']:=Buf;
dm.TSORU.Post;
TempStream.Free;
end;
Birde Firebird de TBlobStream kullanamadım, BDE de oluyor. DBTable usese eklenirse, ben BDE kullanmıyorum. FireBird de TBlobstream yerine ne kullancağım şu an bilmiyorum, Artık deneyeceğiz, sorum da bir tek resim olarak kaydetme kaldı onuda hallederiz herhalde......Forumda benzer blob alan ile ilgili açıklamalar vardı ama onları tutturamadım..
Firebirdd e yukarıdaki işlemin devamı olarak resim kaydetme ile ilgili örnek verecek bir arkadaş varsa lütfen bekliyorum....
Şimdiden teşekkür ederim.....
resim kaydetme blob alana FB de
Neyse ben bir yerlerden buldum ve ayarladım resim kaydetme işlemini, sizlerle paylaşmak istedim. Sorum da cevaplanmış oldu, ilgilenen arkadaşlara duyurulur.
Bu fonksiyonları başka bir yerden aldım; aynı zamanda tüm ekranı resim olarak alabilirsiniz.
GetScreenAsBitmap(Image1.Picture.Bitmap); //yazarak
Şimdi bizim soru ile alakalı kısma gelelim.
Yukarıda bahsetmiştik bir olecontainerimiz vardı ve buraya word den bir veri getirmiştik. Bu veriyi word olarak veritabanına kaydetmeyi, düzeltmeyi bahsetmiştik. Kalan ise bu olecontainerdeki verinin resim olarak image ye ve veritabanına kayıt işlemi idi.
Aşağıdaki kodla image1 içerisine veriyi resim olarak alabiliyoruz.
Aynı şekilde veritabanına kayıt etmek için (burada FireBird kullanıldı)
Bu sayede veritabanına hem word dosya olarak hemde resim olarak kayıt işlemini gerçekleştirmiş olduk. Ama veritabanı çok şişecek herhalde bakalım 10.bin kayıtta kaç megabayt olacak. Tahmin ediyorum resimleri dışarı koyacağız herhalde. Neyse bir fikri olan arkadaş varsa sevinirim. Çünkü ben resimleri hep dışarıda tutardım bu ilk olacak bakalım nereye varacak......Herkese saygılar ve kolay gelsin....Bu foruma katkısı olan tüm arkadaşlardan Allah C.C Razı olsun........
Kod: Tümünü seç
function GetDcAsBitmap(DC: HDC; Bitmap: TBitmap; W, H: Cardinal): Boolean;
var
hdcCompatible: HDC;
hbmScreen: HBitmap;
begin
Result := False;
if DC = 0 then Exit;
hdcCompatible := CreateCompatibleDC(DC);
hbmScreen := CreateCompatibleBitmap(DC, W, H);
if (hbmScreen = 0) then Exit;
if (SelectObject(hdcCompatible, hbmScreen)=0) then Exit;
if not(BitBlt(hdcCompatible, 0,0, W, H, DC, 0,0, SRCCOPY)) then
Exit;
Bitmap.Handle := HbmScreen;
Bitmap.Dormant;
Result := True;
end;
function GetScreenAsBitmap(Bitmap: TBitmap): Boolean;
var ScreenDC: HDC;
begin
ScreenDC := CreateDC('DISPLAY', NIL, NIL, NIL);
Result := GetDCAsBitmap(ScreenDC, Bitmap,
GetDeviceCaps(ScreenDC, HORZRES),
GetDeviceCaps(ScreenDC, VERTRES)
);
end;
function GetWindowAsBitmap(const WindowName: string;
Bitmap: TBitmap): Boolean;
var Wnd: HWnd;
Rect: TRect;
begin
Wnd := FindWindow(nil, PChar(WindowName));
GetWindowRect(Wnd, Rect);
Result := GetDCAsBitmap(GetWindowDC(Wnd), Bitmap,
Rect.Right - Rect.Left, Rect.Bottom - Rect.Top);
end;
function GetWindowAsBitmap(Wnd: HWnd; Bitmap: TBitmap): Boolean;
var
Rect: TRect;
begin
GetWindowRect(Wnd, Rect);
Result := GetDCAsBitmap(GetWindowDC(Wnd), Bitmap,
Rect.Right - Rect.Left, Rect.Bottom - Rect.Top);
end;
GetScreenAsBitmap(Image1.Picture.Bitmap); //yazarak
Şimdi bizim soru ile alakalı kısma gelelim.
Yukarıda bahsetmiştik bir olecontainerimiz vardı ve buraya word den bir veri getirmiştik. Bu veriyi word olarak veritabanına kaydetmeyi, düzeltmeyi bahsetmiştik. Kalan ise bu olecontainerdeki verinin resim olarak image ye ve veritabanına kayıt işlemi idi.
Aşağıdaki kodla image1 içerisine veriyi resim olarak alabiliyoruz.
Kod: Tümünü seç
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
GetWindowAsBitmap(OleContainer1.Handle, Image1.Picture.Bitmap);
end;
Kod: Tümünü seç
uses e JPEG eklemeyi unutmayın....
procedure TForm1.BitBtn7Click(Sender: TObject);
var
aMS: TMemoryStream;
begin
if not (Image1.Picture.Graphic is TJPEGImage) then
Image1.Picture.Graphic := TJPEGImage.Create;
GetWindowAsBitmap(OleContainer1.Handle, Image1.Picture.Bitmap);
aMS := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(aMS);
dataModule1.IBTable1.Edit;
aMS.Position := 0;
TBlobField(dataModule1.IBTable1.FieldByName('RESIM')).LoadFromStream(aMS);
dataModule1.IBTable1.Post;
finally
aMS.Free;
end;
end;
Database'deki image ya da blob alandaki veriyi yeniden dosya olarak açma konusunda bir çalışman oldu mu ? Yani ben image alana diyelim ki deneme.jpg dosyasını gönderdim.Daha sonra bu alandan bu bilgiyi alıp örneğin c:\deneme.jpg şeklinde kaydetmek (oluşturmak) istiyorum.Bunun yöntemi nedir?
T.Tolga Özbaltalar - http://www.veridizayn.com
Re: Olecontainer de görüntüyü image ve doc olarak FB e kaydetmek
Şu anda inanılmaz derecede bana da lazım oldu, Olecontainer nesnesini de bir ara gözden geçireceğim pdf doc xls kaydı, Kalsın burda lazım olacak..
Binary Bloba PDF veya dosya Yükleme
Blobdan Binary Olarak yüklenmiş Dosyanın extract edilmesi
Binary Bloba PDF veya dosya Yükleme
Kod: Tümünü seç
procedure TForm1.RzBitBtn3Click(Sender: TObject);
VAR
BLOB:TSTREAM;
FS:TFILESTREAM;
BEGIN
UniQuery1.Edit;
blob := UniQuery1.CreateBlobStream(UniQuery1.FieldByName('PDF'), bmWrite); // PDF = VERİTABANINDAKİ PDF BLOB ALANI
try
blob.Seek(0, soFromBeginning);
fs := TFileStream.Create('c:\TEST_DOSYASI.PDF', fmOpenRead);
blob.CopyFrom(fs, fs.Size);
fs.Free ;
blob.Free ;
UniQuery1.POST;
except
Application.MessageBox('Hata oluştu','Hata',MB_OK+MB_ICONERROR);
end;
end;
Blobdan Binary Olarak yüklenmiş Dosyanın extract edilmesi
Kod: Tümünü seç
procedure TForm1.RzBitBtn2Click(Sender: TObject);
VAR
BLOB:TSTREAM;
FS:TFILESTREAM;
BEGIN
blob := UniQuery1.CreateBlobStream(UniQuery1.FieldByName('PDF'), bmRead);
try
blob.Seek(0, soFromBeginning);
with TFileStream.Create('c:\extract_from_db_TEST_DOSYASI.PDF', fmCreate) do
try
CopyFrom(blob, blob.Size)
finally
Free
end;
finally
blob.Free
end;
END;
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;