Delphi koordinat sistemi çalışması

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
haymet
Üye
Mesajlar: 18
Kayıt: 25 Şub 2014 03:59

Delphi koordinat sistemi çalışması

Mesaj gönderen haymet »

Merhaba arkadaşlar, (Delphi 7) Hazır yapılmış bir programda (Hocamın kendi programıdır) geliştirme yapmak istiyorum.
Öncelikle programdan biraz bahsediyim. Program mesleki bir program. Harita müh. leri için serbest ağ dengelemesi yapıyor ve txt dosyalarından veri okuyor yeniden txt dosyasına hesaplamarı yapıp kaydediyor. (Basit gibi duruyor ama inanın çok karmaşık :) ). Neyse mesleğimiz gereği koordinat sistemiyle çalışıyoruz ve programı geliştirmek amaçlı fikirlerimizi söyleyim,
1-) Girilen txt dosyasında bulunan koordinatları bir ekrana yazdırmak.(nokta sayısı değişsede hepsini yazdıran genel bir program lazım)
2-) Noktaların koordinatlarının olduğu yere label yada vb. bir şeyle isimlerini yazdırmak.
3-) Bunlardan birbirlerine çizgi çekmek(Poligon agı).ve o çekilen çizgilere tıklayarak sadece istenilen çizgileri hesaba katmayı sağlamak. (Bütün her şeyi hesaplatmak yerine sadece seçilileri maus yoluyla hesaplatmak).
Benim geldiğim nokta:
*Noktaların koordinatlarını bir editten alıp poligon agı yapabilen bir şey yaptım.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var x, y: Longint; {Bir nokta için iki değişken tanımlanıyor}
Begin
x := StrtoInt(Edit1.text); y := StrtoInt(Edit2.text); //Değişkenlere değer saklanıyor

Form1.Canvas.Polygon([Point(x, y), Point(30, 10), Point(130, 30), Point(240, 120)]); //x ve y yi örnek olsun diye koydum 30,10,130,30,240,120 iyi de aynı şekilde değiştirebilirim.
end;
End.
txt dosyasının şu satırdakini al yapmayı bilmediğimden editten aldırdım. Program yapılmış olduğundan farklı bir projede çalışıyorum, geçici bir şekilde editten aldırıyorum.
Bana yardımcı olabileceğini düşündüğünüz kodlar veya eklentileri paylaşırsanız sevinirim.
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Delphi koordinat sistemi çalışması

Mesaj gönderen akdatilla »

Merhaba,
Anladığım kadarıyla şekiller üzerinde tıklama yapma gibi bazı fonksiyonlar yapmanız gerekiyor. Ekran üzerinde bir çok şekil oluşturmanız, şekiller üzerinde değişiklikler yapacaksanız, bunları nesne tabanlı oluşturmanız size büyük fayda sağlar. Hazır bir çizim paketi kullansanız işiniz daha kolaylaşır.
Aşağıdaki linki kullanarak ücretli ve ücretsiz bazı bileşenleri incelemenizi tavsiye ederim:
http://www.torry.net/pages.php?id=112

Kolay gelsin.
haymet
Üye
Mesajlar: 18
Kayıt: 25 Şub 2014 03:59

Re: Delphi koordinat sistemi çalışması

Mesaj gönderen haymet »

Canvasdan şekilleri çizdirebiliyorum, yanlız o şekillere tekrar tıklamam lazım,

şöyle anlatıyım:
Elimde 2 noktanın koordinatı var bunları ekran da güzel duracak şekilde ufak bir kodla ekrana yazdırabiliyorum
Bu yazdırdığıma bir isim yada ona benzer bir şey atamam lazım,
ona tıkladığımda gerçek koordinatlarına dönüp onu hesaba katması lazım.
ama uğraşcağım koordinatlar 2-3 tane değil belki 50 -60 tane olacağı için kendi yazdığım canvas.lines kodu iş görür mü ne kadar görür ekranda nasıl gözükür onu daha bilemiyorum ancak gönderdiğiniz linke akşam bir göz atarım teşekkürler, Hiç kullanmadım ama her şeyin bir ilki vardır saolun...
Kullanıcı avatarı
muratmutlu
Üye
Mesajlar: 57
Kayıt: 02 Tem 2005 02:44
Konum: Antalya

Re: Delphi koordinat sistemi çalışması

Mesaj gönderen muratmutlu »

Merhaba,

Yapmak istediğini tam anlayamamak ile birlikte şöyle bir şey yaptım:

Bir tane tip tanımladım

Kod: Tümünü seç

type
  TOzelNesne = class(TShape)
  public
    Ozellik1: Integer;
    Ozellik2: String;
  end;
Form1 tipine şu satırı ekledim:

Kod: Tümünü seç

  private
    { Private declarations }
    procedure OzelNesneClick(Sender: TObject);
  public
Kod satırına aşağıdaki fonksiyonu ekledim:

Kod: Tümünü seç

procedure TForm1.OzelNesneClick(Sender: TObject);
begin
  ShowMessage(TOzelNesne(Sender).Ozellik2);
end;


Son olarakda test edebilmen için formun onMouseDown event ına şöyle bir kod yerleştirdim:

Kod: Tümünü seç

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Nesne: TOzelNesne;
begin
  Nesne := TOzelNesne.Create(Self);
  Nesne.Left := X;
  Nesne.Top := Y;
  Nesne.Width := 50;
  Nesne.Height := 50;
  Nesne.Shape := stRoundRect;
  Nesne.Parent := Self;
  Nesne.OnClick := OzelNesneClick;
  Nesne.Ozellik2 := IntToStr(Random(100));
end;
Bu kodları yazıp çalıştırınca forma tıkladığın her yere bir shape oluşturacak. Daha sonra istersen bu shapelere tıklayınca da o nesnenin özelliklerine ulaşabileceksin. Bu nesneyi bir kez oluşturduktan sonra ekranda bir daha çizmene gerek yok. Üstelik de istediğin kada özellik ekleyip (Ozellik1, Ozellik2 gibi) kullanabilirsin. Tek dezavantajı ise memory kullanımı yönünden hiç de iyi değil. Aslında bunları bir list e atıp daha sonra oradaki listeye göre free edebilirsin ama ben bunu sana örnek olarak hazırladım. Umarım doğru düşünmüşümdür.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Delphi koordinat sistemi çalışması

Mesaj gönderen mrmarman »

Bir alternatif sunayım, haritalamada şahsen aşağıdaki saydığım metodu kullanıyorum. Çok başarılı bir yöntem olduğuna kefilim. Kısaca şöyle ifade edeyim.

(1) Bir görünen haritanız var. Bu bir TImage olsun.

(2) ben bununla aynı boyutlara sahip ikinci bir TImage veya TPaintBox koyuyorum ama visible özelliği false olarak belirliyorum.

(3) TImage üzerinde yapılan tıklama / tarama / seçim vb. işlemleri renk kodları vererek aynı X,Y koordinatıyla ekranda görünmeyen TImage veya TPaintBox üzerinde çizim ve boyama ile hayata geçiriyorum.

(4) Geri dönüş lazım olduğunda (mouse ile seçim, bloklama, silme vs. operasyonlarda) bu paint box üzerindeki aynı X,Y koordinatında ne kodlu renk varsa o işlemi görünen TImage üzerinde kullanıcıya gösteriyorum.

- Nerelerde kullandım, araç takip araç konum animasyonları, Türkiye haritasında il/İlçenin sınırları içerisinde herhangi bir noktayı tıklayınca sorgulama yapma vb.( tahmin edeceğiniz gibi hiçbir il/ilçe düzgün bir yüzölçümüne sahip değil, bu söylediğim yöntemle sınırlarına kadar algılayabiliyoruz )

(*) Özetle şu anki mevcut altyapınız ile birebir uyumlu çalışabilecek bir sistemdir. :idea:
Resim
Resim ....Resim
haymet
Üye
Mesajlar: 18
Kayıt: 25 Şub 2014 03:59

Re: Delphi koordinat sistemi çalışması

Mesaj gönderen haymet »

Resim

arkadaşlar biraz anlaşılmamış heralde onun için bir çizim yaptım, ve geldiğim aşamaları ve yapmak istdiklerimi yazıyorum.
1-) Dosyalar yüklenince otomatik şekil oluşcak (Dosya yüklenmesi tamam, Form2 ye koordinatları indirgeyerek oluşturmakda sıkıntım var)
2-) List box a oluşacak şekil deki çizgileri elle ekle butonuyla yapıyorum, yerine tıklayınca çizgiye tıklayınca otomatik eklenen ya da renk değiştiren çizgiyi eklemek istiyorum.
3-)List boxa yada tıklayınca oluşan noktaları tekrar hesaba sadece onları katmayı istiyorum.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Delphi koordinat sistemi çalışması

Mesaj gönderen Lost Soul »

Basitçe Autocad tarzı birşey yapmak istiyorsunuz.
Bunun için her bir çiziminizi ekrana çizdirmekle beraber kendi veri kümenizi de tutmalısınız.
Eğer objelerinizin tümü düz çizgilerden ibaret ise bunlar Array of TPoint türünde tutmanız yeterli olacaktır.
Çizimleri güncellemeniz gerektiğinde tek yapmanız gereken bu tpoint dizisini(n içindeki noktalar arasını) çizdirmek olacaktır. TPoint ile ilgili çeşitli çalışmalar hem bu forumda hem de nette mevcuttur.

Ayrıca @muratmutlu arkadaşımız da buna benzer bir örnek vermiş. Tabi verdiği örnek daha komplex nesneler çizebilmek için.

Nesnelere tekrar tıklayabilme olayına gelince. Bunun için de bellekte tuttuğunuz TPointler (ve @muratmutlu nun belirttiği tarzdaki objeler için) Farenin o nesne üzerinde olup olmadığı ile ilgili hesaplamalar yapmanız gerekcek. Burada ClientRect ler Mouse.X(Y) ler rectangle lar, poinlter havada uçuşacak haliyle.

Her bir nesnenize @muratmutlu nun belirtiği gibi özellikler kazandırarark bu tip işleri o objelere yığabilirsiniz.
Örneğin nesne.isMouseOnOver gibi

Bu işler için kod yazmak benim için keyif verici olurdu fakat işlerimin yoğunluğu nedeniyle Oturup size kod yazamam.

ancak size bu şekilde fikir verebilirm.
iyi çalışmalar.
haymet
Üye
Mesajlar: 18
Kayıt: 25 Şub 2014 03:59

Re: Delphi koordinat sistemi çalışması

Mesaj gönderen haymet »

@lost soul teşşekkür ederim ilgilendiğiniz için öncelikle,
Yanlız benim şöyle bir sıkıntım var delphiye yeni başlıyorum ve 4 ay içinde bu programı bitirmem lazım.
Araştırmalarım sonucu geldiğim yeri söyleyim.
Form yerine İmage dosyasıyla ekrana yazdırarak image koordinatlarına göre çizim yaptırabiliyorum. şimdi üstünde uğraştığım şey yazdırdığım koordinatları ekranda ölçekleyerek çizdirmek.

Örnek veriyim. Koordinatlar ne olursa olsun image ekranının otomatik ölçekleyerek bütün çizimi ekranda göstermesini sağlamak.

Aklıma 2 çözüm yolu geldi.
1. cisi çizilmesi gereken koordinatları ekran koordinatlarına indirgemek. (mesela 45000,45000 koordinatını 0,0 yap bütün noktları ona göre çiz) ama onda şöyle bir sıkıntı çıkıyor ortaya girilen değerler 45000 den küçükse ne olcak ? yani koordinatları büyük noktalarla çalışcağım için genelde sorun çıkartabilir.
2. cisi de resim olarak çizdiği için bunu boyutlandırarak çizmesini sağlamak olabilir diye düşündüm. Yardımcı olabilecek arkadaşlar lütfen özel mesajla basit sorularımada cevap verebilirse sevinirim malum delphiye yeni başladım çok basit şeyleri fazla bilmiyorum.
Cevapla