resimler...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
resimler...
Master-Detail kullanarak dosyalarımı kullanıyorum. dosyano ile resim filedleri ilişkili... Bazen bir dosya no sunda 4-5 tane resim olabiliryor.
Yapmak istediğim resimlerin hepsini bir arada görmek ACDSee deki gibi mesala, yada başka bir yol önereceğiniz birşey varmıdır.
Teşekkürler
Yapmak istediğim resimlerin hepsini bir arada görmek ACDSee deki gibi mesala, yada başka bir yol önereceğiniz birşey varmıdır.
Teşekkürler
Selamlar,
Sorunuzu okudum ama tam anlayamadım. Yapmak istediğiniz şey Delphi üzerinde mi?
Yani ACDSee'ye benzer bir şekilde aynı form üzerinde birkaç değişik resmi göstermekten mi bahsediyorsunuz. Yoksa ACDSee'ye bunları bir parametre olarak geçip orada mı göstermek istiyorsunuz.
Eğer biraz daha açıklayıcı anlatırsanız yardımcı olmaya çalışırız.
Kolay Gelsin.
Sorunuzu okudum ama tam anlayamadım. Yapmak istediğiniz şey Delphi üzerinde mi?
Yani ACDSee'ye benzer bir şekilde aynı form üzerinde birkaç değişik resmi göstermekten mi bahsediyorsunuz. Yoksa ACDSee'ye bunları bir parametre olarak geçip orada mı göstermek istiyorsunuz.
Eğer biraz daha açıklayıcı anlatırsanız yardımcı olmaya çalışırız.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
yapmak istediğim tümüyle delphi içinde olmalı. Mesela kişiye ait resimlerin hepsini bir arada görebilmeliyim. (ASDsee örneğini bunun için vermiştirm oradada açınca resimleri bir arada görebiliyorsunuz)
Dediğim gibi benim master detail tablomda resimleryolu dosya no ile ilişkili. Velhasılı dosya nosunu göstererek (yada başka şekilde) o kişi adına yüklenmiş resimleri toplu halde görebilmek istiyorum.
teşekkürler
Dediğim gibi benim master detail tablomda resimleryolu dosya no ile ilişkili. Velhasılı dosya nosunu göstererek (yada başka şekilde) o kişi adına yüklenmiş resimleri toplu halde görebilmek istiyorum.
teşekkürler
Selamlar,
Aşağıda anlatacağım mantık, Master'da ana bilgiler, Detail'de ise Resimlerin Path'lerinin durduğu varsayımı iledir.
Ekranı en az iki parçaya bölüp, bir kısmında master detail tabloları göstermelisiniz gerekirse burada edit yapılabilmeli.
Diğer bölümünde ise
TImage nesnesinden, Detaildeki kayıt sayısında türetilmiş nesneler olmalı.
Yani
Detailde dön,
TImage create et,
create ettiğin nesneyi bir arraya at,
Formdaki pozisyonunu ayarla,
boyutunu ayarla,
Stretch'ini true yap,
Detail'den dosyanın Path'ini ve Dosya adını al,
LoadFromFile ile yüklet,
Detailden yeni bir kayıt al taa ki detailde sona ulaşıncaya kadar.
Yalnız bunları forma yerleştiriken, yerleşime dikkat et. Örneğin gösterim boyutu 100*100'lük olsun. Bir tane okudunuz ve create ettiniz ve bunun pozisyonu 0,0'dan 100,100 yerleştirdiniz, diğerini yerleştirirken bunun yanına çıkması için 200,0'dan 300,100 olarak yerleştirmeniz lazım, diğerleri yanına gelecek şekilde bir mantık,
Sağa doğru sayfa bittiğinde bir alt satıra geçmesini sağlamalısınız.
Ayrıca en son olarak TImage nesnesi çift tıklanır ise yeni bir Modal açılan formda seçilen nesnenin bilgileri ile fullscreen (veya size'ı ne ise) o boyutta açılan bir formda resmin asıl boyutu ile görüntülenmesini sağlayabilirsiniz.
Umarım yol gösterici olmuştur ve umarım işinize yarar.
Anlaşılmayan bir şey varsa yada ihtiyaç duyduğunuz başka bir şey varsa yazın.
Kolay Gelsin.
Aşağıda anlatacağım mantık, Master'da ana bilgiler, Detail'de ise Resimlerin Path'lerinin durduğu varsayımı iledir.
Ekranı en az iki parçaya bölüp, bir kısmında master detail tabloları göstermelisiniz gerekirse burada edit yapılabilmeli.
Diğer bölümünde ise
TImage nesnesinden, Detaildeki kayıt sayısında türetilmiş nesneler olmalı.
Yani
Detailde dön,
TImage create et,
create ettiğin nesneyi bir arraya at,
Formdaki pozisyonunu ayarla,
boyutunu ayarla,
Stretch'ini true yap,
Detail'den dosyanın Path'ini ve Dosya adını al,
LoadFromFile ile yüklet,
Detailden yeni bir kayıt al taa ki detailde sona ulaşıncaya kadar.
Yalnız bunları forma yerleştiriken, yerleşime dikkat et. Örneğin gösterim boyutu 100*100'lük olsun. Bir tane okudunuz ve create ettiniz ve bunun pozisyonu 0,0'dan 100,100 yerleştirdiniz, diğerini yerleştirirken bunun yanına çıkması için 200,0'dan 300,100 olarak yerleştirmeniz lazım, diğerleri yanına gelecek şekilde bir mantık,
Sağa doğru sayfa bittiğinde bir alt satıra geçmesini sağlamalısınız.
Ayrıca en son olarak TImage nesnesi çift tıklanır ise yeni bir Modal açılan formda seçilen nesnenin bilgileri ile fullscreen (veya size'ı ne ise) o boyutta açılan bir formda resmin asıl boyutu ile görüntülenmesini sağlayabilirsiniz.
Umarım yol gösterici olmuştur ve umarım işinize yarar.
Anlaşılmayan bir şey varsa yada ihtiyaç duyduğunuz başka bir şey varsa yazın.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Selamlar,
Biraz uğraştırır ama yapılmayacak kadar zor değil Kasmaz yani, sadece biraz kod fazlalığı var o kadar
Kolay Gelsin.
Biraz uğraştırır ama yapılmayacak kadar zor değil Kasmaz yani, sadece biraz kod fazlalığı var o kadar

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kod: Tümünü seç
procedure TForm1.DataSource5DataChange(Sender: TObject; Field: TField);
begin
if FileExists('C:\HKPro\arsiv\'+(Form1.table1DosyaNo.AsString+'_'+Form1.Table5ID.AsString)+'.jpg') then
begin
Image1.Visible := True;
Image1.Picture.LoadFromFile('C:\HKPro\arsiv\'+(Form1.table1DosyaNo.AsString+'_'+Form1.Table5ID.AsString)+'.jpg');
end else Image1.Visible := False;
end;
Selam...
- Şu an İstanbul'dayım, kod örneği vs. gönderemiycem ama sadece yol yordam adına bir iki önerim olacak...
- @Kuri_TLJ'nin yöntemini denemişsin... Bunu bir adım ileri taşımak şeklinde çözüme ulaşabilirsin...
- Master/Detail işlemlerini halletmişsin bu güzel haber...
Master Tablonda Referans bilgileri (örnek iller olsun) bulunduğunu ve detail Tablonda da bu iller referansında değişken sayıda image path bilgisi olduğunu varsayalım... Mesela İstanbul 5 adet image, Ankara 10 adet image şeklinde...
ACDSee'nin Image Browse olayındaki Thumbnail image fonksiyonunu kurmak için, benim önerim her resim için ayrı ayrı TImage değil bir TImage içerisine belirlediğin koordinatlara Canvas.Draw metodu ile kaynak resimleri yapıştıracaksın... Bunların hemen altına da Canvas.TextOut ile de detay bilgilerini yazıp işlemi bitireceksin...
- Şöyle ki... Sol tarafta Referanslarının olduğu bir tablo olduğunu ve sağ tarafta da bir ScrollBox içerisinde resimlerini browse edebileceğin bir panelin olmasını nasıl sağlarsın onu tarif edeyim...
Bundan önce algoritmik bir önçalışma yapmalısın... Çünkü dinamik çözüm üretmenin dışında algortima programcılığın ABC'sinde A sırasındadır...
Resimlerin başlangıç olarak 100x100 olacak olsun ve her resim arasında 20 Width ve 50 height boşluk koymak istersek, 100x100'lük bir resim aslında 120width, 150 height'lik yer alacak sonucuna varırız...
Bu durumda ve/veya kullanıcı ayarlı olmasını istediğin taktirde değişken olacak diğer boyutları düşünüp, scrollbox'u sanal olarak gridlere ayıracak ve hangi koordinat diliminin hangi resme ait olduğunu, daha mouse üzerinde gezinirken bilinmesini sağlayacaksın...
Bir resim hangi boyutlarda olursa olsun, bir kenarını 100'e veya kullanıcı tarafından belirlenen boyuta eşitleyip diğer kenarını 0..100 veya kullanıcının belirttşpş boyut arasında oranlı bir şekilde nasıl küçültebileceğini (Canvas.StrechDraw) değerlendiriyorum...
Metod basit bir doğru orantı formülüne dayanır... Width/Height oranını bir real değişkene atacaksın, bu değer 1'den büyükse 100 rakamını buna bölecek, 1'e eşit veya küçükse 100 ile çarpacaksın... Bu işlem ile bir kenarı (Width veya Height) 100 olan çerçevenin diğer kenarının 0..100 arasındaki diğer boyutunu verecektir...
Browser ekranımıza dönelim... 100x100 düşündüğümüz her resim bloğu için bize lazım olan boyutun 120x150 olduğuna karar kılmıştık...
Bir satırda kaç resim olduğunu şu formülle bulucaz...
Bu şekilde kaç satır resim olacağını da Detail tablodakli kayıt sayısını bu satırdaki resim sayısına bölerek bulucaz.. Bölme işlemi küsüratlı çıktıysa en alta bir satır daha ihtiyaç olduğu ve burada bir satıra sığan resim sayısından daha az sayıda ekstra resim olacağını da biliyor olucaz... Bunun için fazladan bir satır daha hesaba katılacaktır...
Sıradaki işlem; ScrollBox içerisine yerleştirilen TImage nesnesinin boyutlarını şöyle ayarlamak..
Geriye her resmi bir döngüye sokup, boyutlarını küçültüp ilgili sanal grid'e çizdirmen kalıyor...
Bir de 100 height'te resim bittiğini biliyoruz ya (hani oran hesabı yapmıştık) 100 ile 150 arasında bir yere TextOut ile yazı yazdırıp o resmin ne olduğunu kullanıcıya bildirecek başlık...
Kolay gelsin...
Bu anlattıklarımı acele acele yazıyorum, sonuçta bir Internet Cafe'deyim ve katim kısıtlı... Yaptığın işlemin başlangıçta basit olmadığını ve çalışmalarını bitirdiğinde aslında ne kadar basitmiş diyeceğini biliyorum... Ben de daha önce böyle bir proje yapmıştım... Metod ise aynı yukarda bahsettiğim gibiydi... Yani çözümü var....
Dene, yapamazsan arkadaşlarım yardımcı olurla veya Ankara'ya dönünce buradan bir örnek yayınlarım...
- Vakit olursa @admin'imizi de ziyaret edicem...
- Şu an İstanbul'dayım, kod örneği vs. gönderemiycem ama sadece yol yordam adına bir iki önerim olacak...
- @Kuri_TLJ'nin yöntemini denemişsin... Bunu bir adım ileri taşımak şeklinde çözüme ulaşabilirsin...

- Master/Detail işlemlerini halletmişsin bu güzel haber...



- Şöyle ki... Sol tarafta Referanslarının olduğu bir tablo olduğunu ve sağ tarafta da bir ScrollBox içerisinde resimlerini browse edebileceğin bir panelin olmasını nasıl sağlarsın onu tarif edeyim...








Kod: Tümünü seç
ScrollBox width değeri / 120 width değeri = sonucunun Trunc() fonksiyonu ile alınacak tamsayı sonuc


Kod: Tümünü seç
- TImage.Width := Satırdaki resim sayısı * resim başına düşen 120 Width
Kod: Tümünü seç
- TImage.Height := Kaç satır resim olacağı * resim başına düşen 150 height





- Vakit olursa @admin'imizi de ziyaret edicem...

En son mrmarman tarafından 05 Mar 2004 03:16 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
- Özel mesaj ile bildirmene gerek yoktu, bu başlık altında denediğini ama istediğin sonucu elde edemediğini yazsaydın da bana zaten otomatik olarak mail geliyor...
- Bugüne kadar hiç üşenmeden cevap yazdım, vaktim oldukça buna devam da ederim...
- Özel bir örnek hazırladım...
- Formuna aşağıdaki nesneleri koy...
- Form Create olayında mı yaparsın, başka şekilde mi bilmem ama ListBox'a BMP dosyalarının dizinleriyle birlikte listesini yaptır... Ben örnek olsun diye FormCreate olayında yaptım...
- Butona bastığında ScrollBox içinde etrafında mavi çerçeveli ve her resmin altında da o resmin adını textout ile yazılmış olarak göreceksin...
- Resimler üzerinde mouse ile hareket ederken de Formun başlığında o resme ait bilgileri göreceksin...
Hazır kod konusunda ne kadar katı da olsak, DelphiTurkiye forumunda bunun başka örneğini görmediğimden kod göndermeyi uygun gördüm.
Anlaşılır olmasına da çaba gösterdim... Aynı gerekçe ile değişken isimlerini de uzun tuttum...
Geriye afiyet olsun demek kalıyor...

- Bugüne kadar hiç üşenmeden cevap yazdım, vaktim oldukça buna devam da ederim...

- Özel bir örnek hazırladım...

- Formuna aşağıdaki nesneleri koy...
Kod: Tümünü seç
TListBox (ListBox1)
TScrollBox (ScrollBox1)
TImage (Image1) // ScrollBox içine koyacaksın...
Button (bt_KucukListe)
Kod: Tümünü seç
procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000001.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000002.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000003.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000004.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000005.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000006.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000007.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000008.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000009.BMP');
ListBox1.Items.Add('D:\Delphi\DelphiTurk\Thumbnail Image\IMAGES\00000010.BMP');
end;
Kod: Tümünü seç
procedure TForm1.bt_KucukListeClick(Sender: TObject);
Const
SatirArasiBosluk = 50;
SutunArasiBosluk = 20;
Var
Blok : Integer;
SatiraSigan : Integer;
Sayac : Integer;
EskiX : Integer;
Resim1, Resim2 : TBitmap;
Oran : Single;
YeniWidth : Integer;
YeniHeight : Integer;
SayacSoldanSaga,
SatirNo : Integer;
begin
Blok := 100; // Resim Karesi
SatiraSigan := ScrollBox1.Width div (Blok + SutunArasiBosluk);
Image1.Picture.Bitmap := Nil; // Image içini boşalttık...
// Image1.Width
Image1.Width := (Blok + SutunArasiBosluk) * SatiraSigan;
// Image1.Height
If (ListBox1.Items.Count MOD SatiraSigan) > 0
then Image1.Height := (Blok + SatirArasiBosluk) * ((ListBox1.Items.Count div SatiraSigan)+1) // Artan 1,2,n resim varsa...
else Image1.Height := (Blok + SatirArasiBosluk) * ((ListBox1.Items.Count div SatiraSigan) );
Resim1 := TBitmap.Create; // Okunacak resmimiz...
Resim2 := TBitmap.Create; // Yeni oluşacak minik resmimiz...
EskiX := 0; // Image nesnesi üzerindeki kordinat
SayacSoldanSaga := 0;
SatirNo := 0;
YeniWidth := 0;
YeniHeight := 0;
For Sayac := 0 to ListBox1.Items.Count-1 do
begin //Resimleri sırasıyla okutucaz...
Application.ProcessMessages;
Inc(SayacSoldanSaga); // Satırdaki Resim Sayacı
If SayacSoldanSaga > SatiraSigan then
begin
EskiX := 0;
SayacSoldanSaga := 1;
Inc(SatirNo);
end;
Resim1.LoadFromFile( ListBox1.Items[Sayac] ); // Büyük resmi okuduk...
Oran := (Resim1.Width / Resim1.Height); // Width/Height oranını hesapladık...
Case Oran >= 1 of // Widht Height büyüklük ilişkisi doğrultusunda
True : // Width > Height ise
begin
YeniWidth := Blok;
YeniHeight := Trunc(Blok / Oran );
end;
False: // Height > Width ise
begin
YeniHeight := Blok;
YeniWidth := Trunc(Blok * Oran );
end;
end; // Case
Resim2.Width := YeniWidth;
Resim2.Height := YeniHeight;
Resim2.Canvas.StretchDraw( Rect(0, 0, Resim2.Width, Resim2.Height), Resim1 ); // Resim1'i küçülterek Resim2'ye çizdik...
Inc(EskiX, Blok + SutunArasiBosluk);
Image1.Canvas.Pen.Color := clNavy;
Image1.Canvas.Rectangle(EskiX - Blok - SutunArasiBosluk, SatirNo* (Blok + SatirArasiBosluk), EskiX, Blok+(SatirNo * (Blok + SatirArasiBosluk)));
Image1.Canvas.Font.Color := clRed;
Image1.Canvas.TextOut(EskiX - Blok - SutunArasiBosluk, Blok+(SatirNo * (Blok + SatirArasiBosluk)), ExtractFileName(ListBox1.Items[Sayac]) );
Image1.Canvas.Draw((SutunArasiBosluk div 2)+EskiX - Blok - SutunArasiBosluk, 5+SatirNo* (Blok + SatirArasiBosluk), Resim2);
end;
Resim2.Free;
Resim1.Free;
end;
Kod: Tümünü seç
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Const
SatirArasiBosluk = 50;
SutunArasiBosluk = 20;
Var
Blok : Integer;
SatiraSigan : Integer;
begin
Blok := 100;
SatiraSigan := ScrollBox1.Width div (Blok + SutunArasiBosluk);
If ListBox1.Items.Count >= ((y div (Blok+SatirArasiBosluk))*SatiraSigan+(x div (Blok+SutunArasiBosluk))+1) then
begin
Form1.Caption := Format('Resim Adı : %s', [ExtractFileName(ListBox1.Items[((y div (Blok+SatirArasiBosluk))*SatiraSigan)+(x div (Blok+SutunArasiBosluk))])]);
Form1.Caption := Form1.Caption + ' - ' + Format('%d, %d', [(y div (Blok+SatirArasiBosluk))+1, (x div (Blok+SutunArasiBosluk))+1]);
end;
end;





