Language:

İletileri Göster

Bu özellik size üyenin attığı tüm iletileri gösterme olanağı sağlayacaktır . Not sadece size izin verilen bölümlerdeki iletilerini görebilirsiniz


Mesajlar - halilkundakci

Sayfa: [1] 2
1
Doluyerler1 ile dolukareler1'i formactivate yordamının içine tanımlansa da tutarsız sonuçlar veriyor. Ama activate; komutuyla başka bir yordam içerisinden formactivate yordamı tetiklenirse veya başka bir yordam içerisinden doğrudan kod yazılırsa(onclick gibi) sonuç doğru çıkıyor. onshow,on paint, oncreate işe yaramadı.

Birde artık aşağıdaki kodu kullanıyorum. Bu daha kısa; shape'lerin bulunduğu kareleri bulmaya çalışmak gereksiz. Doluyerler1 ve dolukareler1 içinde gereksiz tip tanımlaması yapmışım.

Alıntı
public
    { public declarations }
  var 
  engeller:array of tpoint;
  end;

procedure TForm1.FormClick(Sender: TObject);
var
i,j,k,l:integer;
begin
  l:=0;
  for i:=0 to form1.ControlCount-1 do
  begin
    if form1.Controls.tag=2 then          //tag değeri 2 olan shape'leri tespit ediyoruz
    begin
      for j:=form1.Controls.Left to form1.Controls.Left+form1.Controls.Width do
      begin
        for k:=form1.Controls.top to form1.Controls.top+form1.Controls.Height do
        begin
          if canvas.Pixels[j,k]=clblack then //Shape'in şeklinin(Örneğin yıldız) altında kalan siyah renkli noktaları buluyoruz
          begin
            inc(l);
            SetLength(engeller,l);
            engeller[l-1]:=point(j,k);
          end;
        end;
      end;
    end;
  end;
  edit2.Text:=inttostr(l);                   //Shape'in şeklinin(Örneğin yıldız) altında kalan siyah renkli yerlerin sayısı
end;

Bu arada bu kodları onactivate, onshow, onpaint, oncreate dışında bir yordama yazdığımızda alanı da doğru hesaplıyor.(brush.style:=bssolid yapılırsa) Yani sorun kodu hangi yordama yazacağımızda.

2
"doluyerler1", "dolukareler1". Bunlar sadece program açılıp kapandığında sıfırlanmazlar mı?(Program içerisinde farklı bir kod yazmadığımız sürece).

Kodları farklı bir Yordam içerisine yazdığımızda(Örneğin mouseenter) sorun çözülüyor.
Ancak activite yordamında sorun çözülebilir mi? Sorunu çözmek için bu yordamın işleyiş mantığına uygun bir çözüm mü bulmak gerekiyor? Veya boşa mı kürek sallıyorum?...

Bu arada kendimce bir şey keşfettim(Pek çok programcı diyecek ki amerikayı daha yeni keşfediyor ;D): 100x100'lük shape çevresi 400. Her nokta sadece 1 kere tarandığı için bulunan nokta sayısı 396 çıkıyor. Tüm dikdörtgenler için geçerli. Örneğin aşağıda 7x4 lük dikdörtgende çevresi 22 yapar. Ancak nokta sayısı 18'dir. Fark 4, sabit.

*******
*         *
*         *
*******


İlkokul mantığıyla çözdüm ;D

3
Embarcadero® Delphi 10.1 Berlin ile denedim. Hiç bir ayarla oynamadan hata ayıklamayı çalıştırıyorum; Sonuç yine aynı: her çalıştırmada farklı sonuç veriyor. Yanlış algoritma mı kullanıyorum acaba? Ekran görüntüsü anlık olarak farklı renk tonlarını mı döndürür? Tıkandım.

4
sonuç yine aynı: Her seferinde farklı hesaplıyor.(edit2.Text:=inttostr(l);), Bazen "0" bile buluyor.

Hatta tasarım aşamasında shape seçili vaziyetteyken hata ayıklamayı çalıştırırsam sonuç yine farklı çıkıyor. (edit2.Text:=inttostr(l);)

Bu yol6 içerisindeki çalışma; aşağıdaki köprüden indirip bakabilirsiniz.

https://drive.google.com/open?id=0B8zsg_8o2163NXRZakhwVFM1V00

Shape 'i kare, pan.style:=pssolid, pan.width:=1, brush.style:=bsclear seçince boyutlarını da 100x100 ayarlayınca: edit2.Text:='400'(Çevre uzunluğu) çıkması gerekmez mi?

Sanki lazarus'ta bir sorun varmış gibi geliyor bana veya programı derlerken benim yapmam gereken bir ince ayar...  ???

5
Amacım siyah bölgeleri(Shape altında kalan noktaları) nokta nokta tespit etmek. Diyelim ki Shepe şekli yıldız olsun; sadece yıldız altında kalan bölgeler mesela.(Shepe.brush.color:=clblack)
Kodu aşağıdaki gibi kısalttım. Ama sonuç yine aynı: Her seferinde farklı hesaplıyor.(edit2.Text:=inttostr(l);), Bazen "0" bile buluyor.

Alıntı
procedure TForm1.FormActivate(Sender: TObject);
var
i,j,k,l:integer;
begin
  l:=0;
  for i:=0 to form1.ControlCount-1 do
  begin
    if form1.Controls.tag=2 then              //tag değeri 2 olan shape'leri tespit ediyoruz
    begin
      for j:=form1.Controls.Left to form1.Controls.Left+form1.Controls.Width do
      begin
        for k:=form1.Controls.top to form1.Controls.top+form1.Controls.Height do
        begin
          if canvas.Pixels[j,k]=clblack then    //Shape'in şeklinin(Örneğin siyah renkli yıldız) altında kalan noktaları buluyoruz
          begin
            inc(l);
            SetLength(engeller,l);
            engeller[l-1]:=point(j,k);
          end;
        end;
      end;
    end;
  end;
  edit2.Text:=inttostr(l);                        //Shape'in şeklinin(Örneğin siyah renkli yıldız) altında kalan yerlerin sayısı
end;

6
Lazarus'ta formun üzerindeki shape'in üzerinde bulunduğu noktaları bulmak için şöyle bir kod yazdım:

Alıntı
uses
  SysUtils, FileUtil, Forms, Controls, Graphics,Classes,
  Dialogs, StdCtrls, ExtCtrls, unit2, video, LResources;

type
  dolukareler=array of trect;
  doluyerler=array of tpoint;

public
    { public declarations }
  var
 
  dolukareler1:dolukareler;
  doluyerler1:doluyerler;
  end;

procedure TForm1.FormActivate(Sender: TObject);
var
  i,j,k,l,m: integer;
begin
  j:=0;
  m:=0;
  for i:=0 to form1.ControlCount-1 do               
  begin
    if form1.Controls.tag=2 then                          //tag değeri 2 olan shape'leri tespit ediyoruz
    begin
      inc(j);
      setlength(dolukareler1,j);
      dolukareler1[j-1].Left:=form1.Controls.Left;
      dolukareler1[j-1].Top:=form1.Controls.top;
      dolukareler1[j-1].Right:=form1.Controls.Left+form1.Controls.Width;
      dolukareler1[j-1].Bottom:=form1.Controls.top+form1.Controls.Height;
      for k:=dolukareler1[j-1].Left to dolukareler1[j-1].Right do
      begin
        for l:=dolukareler1[j-1].Top to dolukareler1[j-1].Bottom do
        begin
          if canvas.Pixels[k,l]=clblack then              //Shepe içindeki siyah renkli noktaları buluyoruz
          begin
            inc(m);
            setlength(doluyerler1,m);
            doluyerler1[m-1]:=point(k,l);
          end;
        end;
      end;
    end;
  end;
  edit2.Text:=inttostr(m);
end;

Ancak shape1'in her form üzerindeki yerini değiştirip programı çalıştırdığımda (shape1'in boyutları  ve şekli aynı kaldığı halde) farklı sonuçlar buluyor(edit2.text:=inttostr(m)). Kod mu yanlış, Lazarus'mu yanlış yoksa çalıştırırken bir hata mı yapıyorum? (Lazarus 1.6.2, Sistem:windows)

7
İstek ve Öneriler / Pisi Forum, Geliştirme, "Lazarus"
« : 09 Ocak 2017, 22:39:28 »
Pisi Forum'muzda Geliştirme altında Lazarus'ta olsa fena mı olur. "Diğer diller" arasından epeyce sıyrılacağını düşünüyorum "C" kadar olmasa da.

Tüm ilgili arkadaşlara iyi çalışmalar.

8
Ömrüm yeterse commandosu baştan yazacağım ;D

Listboxlarda, dizilerde belli bir sütuna göre belli bir fonksiyonla sıralama yapılabiliyor mu? Yapılamıyorsa sıralama algoritmalarına başvurmak gerekiyor sanırım.

Yol6 da sadece düz gidebiliyor. Benim istediğim engellere çarpmadan en kısa yolu bulması. Bunun içinde verilerin her iterasyonda tekrar hesaplanması, sıralanması ve karşılaştırılması gerekiyor. Bulunan iyi noktaların başka bir veri tablosuna aktarılması gerekiyor.

Benim oyun yapacak kadar zamanım yok. Bu işi tamamen akşamdan akşama, sadece hobi gibi, bilgilerimi zinde tutmak için, deneysel olarak yapıyorum. Bazen yapabileceklerim tıkandığında eski dostum commandosu kurar efkar dağıtırım.

Geliştirme altında birde "Lazarus" başlığı olsa daha iyi olmaz mıydı? Yönetici arkadaşlarımıza saygılarımla.

9
Program değeri var mı? Bilmiyorum. Ama kod değeri var. Tam olarak incelemedim.

Dataya bağlanma aşağıdaki gibi olunca program başka yerlerde çalışabiliyor.
procedure TForm1.FormCreate(Sender: TObject);
begin
  dbf1.FilePath:=ExtractFilePath(Application.ExeName);
  dbf2.FilePath:=ExtractFilePath(Application.ExeName);
  dbf3.FilePath:=ExtractFilePath(Application.ExeName);
  dbf4.FilePath:=ExtractFilePath(Application.ExeName);
  dbf1.Active:=True;
  dbf2.Active:=True;
  dbf3.Active:=True;
  dbf4.Active:=True;
end;
Hayatımda oynadığım ilk oyun 'commandos' tu. Kahramanların seçilip tek tıkla tıklandığı noktaya gitmesi beni baya heyecanlandırmıştı. hala da benim için merak konusu.

'Yol' dizinindeki çalışmadan mı bahsediyorsunuz? Yol bulma algoritması üzerine çalışıyordum. dbf'ler işi yavaşlatıyor tahminimce.

dbf1.FilePath:=ExtractFilePath(Application.ExeName);
Bu satırın amacı dbf'yi kendi exe dosyasının içinde mi olduğu belirtiliyor?

10
Kendi yaptığım çalışmaları aşağıdaki bağlantıya koydum. Çoğu yarım, amaçsız ve deneysel. İnceleyip istediğiniz gibi değiştirip kullanabilirsiniz(Kullanılabilecek gibiyse tabi). Fikirlerinize güveniyorum.

Ayrıca Lazarus'un yeri bence ana pencere(Forum>Geliştirme) olmalı diye düşünüyorum. Sadece bir fikir...

https://drive.google.com/open?id=0B8zsg_8o2163NXRZakhwVFM1V00

11
Haber ve Duyurular / Ynt: PİSİ 2.0 BETA 3 ÇIKTI
« : 26 Aralık 2016, 22:44:04 »
Beta2 den 3'e yuvarlanmayacak mı?

Kotamı zorlamamak için soruyorum.

beta3'den pisi linux 2.0'a yuvarlayabilecek miyiz? ;D

Pisi Linux'ü hiç kurmadım. VirtualBox'tan kurmak istiyorum. Emeği geçenlere şimdiden teşekkürler.

12
Haber ve Duyurular / Ynt: PİSİ 2.0 BETA 3 ÇIKTI
« : 25 Aralık 2016, 20:23:44 »
Pisi linux 2.0'a güncelleme yöntemiyle geçilebilecek mi?

13
PiSi Paket Yapımı / Ynt: pardus 2011 üzerine pisilinux
« : 17 Nisan 2015, 00:44:11 »
iki sistemde 32 veya 64 bit olsaydı paketler kurulabilir miydi?

Güzel bir soru.

14
PiSi Paket Yapımı / Ynt: pardus 2011 üzerine pisilinux
« : 14 Nisan 2015, 10:53:06 »
Teşekkürler, iyi çalışmalar.

15
PiSi Paket Yapımı / pardus 2011 üzerine pisilinux
« : 13 Nisan 2015, 15:36:20 »
pardus 2011 kurulu 32 bit bilgisayarım, acaba pisi linux paketlerini kurup çalıştırabilir mi?

Sayfa: [1] 2
Yukarı Çık & Back to Up