Türkiye haritası resmi üzerinde form tasarlayan ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen conari »

:D Hocam Kıbrıs benim için önemli değil şu an için. 83(+2) den kastın bumudur?
decompilera gerek yok hem swf hem fla sı mevcut bende.

buton olayı için bir yorum yaparmısın hocam. 81 tane buton evetine kod yazmaktansa formdaki hangi butona tıklandığını yakalıyabilirmiyim.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen aslangeri »

bilmiyorum işine yararmı ama şurda arkadaş flaş animasyonlarla etkileşim kurmayı anlatmış
http://www.tugrulhelvaci.com/?p=359
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen mrmarman »

zaten @conari'nin dediği fscommand bu flash ile iletişim için en uygun metod @aslangeri. URL olarak dışarı ihraç ettiği kodları baypass edip delphi kanadında anlamlı bir protokol kurmak yeterli.

83 klavye kazası. :lol: Hızlı yaz yanlış yaz günü bugün.

Buton sorun için, her butonun TAG değerine il kodunu gir ve aşağıdaki gibi uygula

Kod: Tümünü seç

Case TButton(Sender).Tag of
1 : showmessage('Adana butonu basıldı');
6 : showmessage('Ankara butonu basıldı');
34: showmessage('İstanbul butonu basıldı');
end;
Unutmuşum, bir butona bunu yaz, diğer her butonu seçili duruma getirip OnClick eventlerini bir kerede birinci butonun OnClick eventine bağla
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen conari »

Buton olayı o şekilde olmuyor hocam,
Sender ilk buton oluyor. Onun tagı dönüyor(0).

Global bir değişken tanımlayıp, her butonda buna butonun Tagını atıcağım ancak böyle oluyor. Buda yine her butona kod yazmak. Mesajlarla bir şeyler yapılabilrmi Appevent ile falan diye düşünmüştüm?

bugün başka tarafları geliştireyim sanırım yarın Flasha dönerim.

Bilgiler için teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen mrmarman »

Hocam button olsun diğer bileşenler olsun, TAG değeri readonly değil. Sen her butonun TAG değerini öncelikle kendine göre değiştir. Bunu yazılım içinden de yapabilirsin. Hatta 0'dan başlaması için TAG değeri alabilen herhangi bir bileşen bünyesine koyarsan müstakil TAG'ların olur. Genel form vs. bağımsız değer verebilirsin.

Sadece hatırlatma, öncelikle tagların tümüne atıyorum 1000 ve daha büyük değer ver ki, sırayla atama yaparken aynı değerler çakışması durumunda kendiliğinden otomatik değer verip değiştirmesin. Ondan sonra 1'den başlayıp 81'e kadar sıralı değer atayabilirsin.

Veya sen iller için olan TAG değerlerini 20001 Adana, 20002 Adıyaman, 20034 İstanbul gibi değerler verebilirsin. Buna diğer bileşenlerden kimse karşı çıkmaz.
En son mrmarman tarafından 11 Eyl 2009 12:00 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen mrmarman »

Bu arada harita örneğiniz hazır. Haritayı ve Koordinatlarını buldum. Tertemiz bir Türkiye haritanız olacak. 8)

İstediğin olay ekteki dosya ile oluyorsa akşama müstakil bir örnek hazırlarım...
Dosya ekleri
Project1.rar
(202.07 KiB) 268 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen conari »

Hocam Case of olayını Ben yanlış anlamışım oluyor :roll:

Benim istediğim Flash olayı bu, Flashlarımız aynı değil yanlız. :mrgreen:
Hocam ilgin ve bilgiler için teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen mrmarman »

Flash olayı değil ki, flash içinden aldığım ekranı WMF yaptım. Çizgileri her boyutta düzgün çıksın diye WMF tercih ettim. Sonra Bitmap'a dönüştürüp kullanıyorum. Bu tümüyle Canvas Draw ve FloodFill olayı. :) Pure Delphi Code :lol:
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen mrmarman »

Kodları hazırladım şöyle..

RES dosyası ekte gönderdim. Bunu RES diye bir klasöre koyarsın, yoksa aşağıdaki RES tanımındaki RES\ kısmını kaldır. Afiyet olsun.

Kod: Tümünü seç

{$R 'RES\RES.RES'}

// -----------------------------------------------------------------------------
// Global Değişken olarak bıraktık ki MouseMove olayında il kodunu alabilelim.
Var
  Koordinat : TStringList;
  xBitmap   : TBitmap;
// -----------------------------------------------------------------------------

procedure TForm1.FormCreate(Sender: TObject);
VAR
  WM  : TMetafile;
  i   : Integer;
  ResStream  : TResourceStream; // Classes - Resource Stream object

  Deger    : String;
  IlKodu   : Integer;
  C        : TColor;
  X,Y      : Integer;
begin
  Koordinat := TStringList.Create;
  Try
    ResStream  := TResourceStream.Create(HInstance, 'Turkiye', RT_RCDATA);
    WM  := TMetaFile.Create;
    WM.LoadFromStream(ResStream);
    xBitmap        := TBitmap.Create;
    xBitmap.Width  := Wm.Width;
    xBitmap.Height := wm.Height;
    xBitmap.Canvas.StretchDraw(xBitmap.Canvas.ClipRect, Wm);
    Image1.Picture.Graphic := xBitmap; // Master
    Image2.Picture.Graphic := xBitmap; // Gizli Referans
    WM.Free;
    ResStream.Free;

    ResStream  := TResourceStream.Create(HInstance, 'Koordinat', RT_RCDATA);
    Koordinat.LoadFromStream(ResStream);
    ResStream.Free;

    for i := 0 to Koordinat.Count - 1 do begin
      // 01.ADANA : 500,393
      Deger  := Koordinat[i];
      IlKodu := StrToInt( Copy(Deger, 1, 2) ); // 01
      System.Delete(Deger, 1, Pos(':', Deger) );
      X      := StrToInt( Trim(Copy(Deger, 1, Pos(',', Deger)-1) ) ); // 500
      System.Delete(Deger, 1, Pos(',', Deger) );
      Y      := StrToInt( Trim(Deger) ); // 393
      Image2.Canvas.Brush.Color := RGB(  0+IlKodu, 128, 255);// İl Koduna Göre Kirimzi ekleyerek Mavi derecelendirmesi...
      C := Image2.Canvas.Pixels[X,Y];
      Image2.Canvas.FloodFill(X, Y, C, fsSurface);
    end;
  Except
  end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
VAR
  C : TColor;
  R : Word;
begin
  C := Image2.Canvas.Pixels[X,Y];
  R := GetRValue(C);
  if (R < 83) AND (Koordinat.Count > 0)
    then Caption := Format( 'Mouse Üzerindeki İlimiz = %s', [ Copy( Koordinat[R-1], 1, Pos(':', Koordinat[R-1]) - 1) ] )
    else Caption := '';
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
VAR
  C : TColor;
  R : Word;
  Deger : String;
  aX, aY : Integer;
begin
  Image1.Picture.Graphic := xBitmap; // Master
  C := Image1.Canvas.Pixels[X,Y];
  Image1.Canvas.Brush.Color := clLime;
  Image1.Canvas.FloodFill(X, Y, C, fsSurface);

  C := Image2.Canvas.Pixels[X,Y];
  R := GetRValue(C);

 if R < 83 then begin
    Deger  := Koordinat[R-1];
    System.Delete(Deger, 1, Pos(':', Deger) );
    aX     := StrToInt( Trim(Copy(Deger, 1, Pos(',', Deger)-1) ) ); // 500
    System.Delete(Deger, 1, Pos(',', Deger) );
    aY     := StrToInt( Trim(Deger) ); // 393

    Image1.Canvas.Brush.Style := bsClear;
    Image1.Canvas.TextOut(aX, aY, Copy( Koordinat[R-1], 1, Pos(':', Koordinat[R-1]) - 1));
 end;
end;
Dosya ekleri
RES.rar
(14.22 KiB) 184 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen conari »

Hocam çok iyi bilgiler verdiniz, teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen Battosai »

mrmarman çözümü güzelmiş ,geçenlerde nerden aklıma geldiyse, bende böle bişey nasıl olur diye düşünüyordum denk geldi:) Aslında hangi ilin üzerinde ise o ilin renklenmesi gibi mouseover efektide eklenebilse çok daha şık olacak...bu işide ehline(mrmarman ) havale etmek lazım :) Bizde lazım oldumu hazıra konarız :twisted:
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen mrmarman »

Zaten OnMouseMove olayına kod yazdık (form başlığına hangi il olduğunu yazıyor) , MouseUp olayındakini ( mouse tıklayınca orayı renklendirme olayı ) OnMouseMove eventine taşırsanız dilediğiniz yerine gelmiş demektir. :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen Battosai »

Kodu deneme şansım olmadığı için renk olayını bilemedim...yani sizin kodlarınız ile seçilen veya üzerine gelinen ilin içi herhangi bir renke tabi tutulabiliyor mu ?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen mrmarman »

FloodFill ile canvas dolgusu yapılıyor. Tabii ki dilediğin rengi kullanabilir tıkladığın ya da mouse ile üzerine geldiğin il sınırları içerisine o sehir ile ilişkilendirdiğin rengi basabilirsin. Renk basmak için şehir listesi programdaki RESOURCE içinde zaten var. İlgili ile geldiğini Gizli olan TImage nesnesindeki renk kodundan tespit ediyorsun. Sonra da hangi ildeysen listeden o ile ait belirlediğin merkez noktasını listeden alıp oraya dilediğin rengi dolgu yapıyorsun. Liste aşağıdaki gibi. Dediğim gibi bu liste RESOURCE'da var ve Koordinatlar ismindeki TStringList'de her zaman kullanımında duruyor.

Kod: Tümünü seç

01.ADANA : 500,393
02.ADIYAMAN : 638,344
03.AFYONKARAHİSAR : 268,282
04.AĞRI : 887,205
05.AMASYA : 504,156
06.ANKARA : 350,203
07.ANTALYA : 306,401
08.ARTVİN : 815,121
09.AYDIN : 114,332
10.BALIKESİR : 116,201
11.BİLECİK : 232,185
12.BİNGÖL : 764,253
13.BİTLİS : 841,288
14.BOLU : 310,161
15.BURDUR : 215,364
16.BURSA : 167,183
17.ÇANAKKALE : 58,175
18.ÇANKIRI : 410,161
19.ÇORUM : 467,160
20.DENİZLİ : 176,335
21.DİYARBAKIR : 746,324
22.EDİRNE : 52,114
23.ELAZIĞ : 702,284
24.ERZİNCAN : 668,225
25.ERZURUM : 811,195
26.ESKİŞEHİR : 270,232
27.GAZİANTEP : 588,390
28.GİRESUN : 643,167
29.GÜMÜŞHANE : 684,180
30.HAKKARİ : 926,352
31.HATAY : 538,430
32.ISPARTA : 272,348
33.MERSİN : 409,420
34.İSTANBUL : 166,111
35.İZMİR : 77,250
36.KARS : 874,171
37.KASTAMONU : 404,96
38.KAYSERİ : 503,296
39.KIRKLARELİ : 101,66
40.KIRŞEHİR : 443,238
41.KOCAELİ : 227,134
42.KONYA : 350,344
43.KÜTAHYA : 196,241
44.MALATYA : 627,291
45.MANİSA : 123,274
46.KAHRAMANMARAŞ : 568,355
47.MARDİN : 763,379
48.MUĞLA : 130,374
49.MUŞ : 818,258
50.NEVŞEHİR : 465,291
51.NİĞDE : 459,327
52.ORDU : 598,154
53.RİZE : 765,133
54.SAKARYA : 249,151
55.SAMSUN : 514,125
56.SİİRT : 830,330
57.SİNOP : 477,88
58.SİVAS : 588,233
59.TEKİRDAĞ : 91,114
60.TOKAT : 551,167
61.TRABZON : 699,144
62.TUNCELİ : 696,251
63.ŞANLI URFA : 671,382
64.UŞAK : 184,291
65.VAN : 920,299
66.YOZGAT : 490,216
67.ZONGULDAK : 320,113
68.AKSARAY : 428,302
69.BAYBURT : 730,178
70.KARAMAN : 378,389
71.KIRIKKALE : 414,217
72.BATMAN : 800,307
73.ŞIRNAK : 841,364
74.BARTIN : 359,94
75.ARDAHAN : 864,114
76.IĞDIR : 928,189
77.YALOVA : 180,153
78.KARABÜK : 365,130
79.KİLİS : 571,413
80.OSMANİYE : 532,389
81.DÜZCE : 290,137
82.Kıbrıs : 404, 512
Resim
Resim ....Resim
estemacan
Üye
Mesajlar: 17
Kayıt: 01 Eki 2007 09:12

Re: Türkiye haritası resmi üzerinde form tasarlayan ?

Mesaj gönderen estemacan »

mrmarman hocamın yazdıklarından yararlanarak bende şöyle bir şey yaptım.
haritadadaki illeri rgb değerlerini birer değiştirerek boyadım.
tüm illerin rengi hemen hemen aynı kaldı.

Kod: Tümünü seç

procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if image2.Canvas.Pixels[x,y]=rgb(175,175,255) then
 label1.Caption:='edirne';
if image2.Canvas.Pixels[x,y]=rgb(175,175,254) then
 label1.Caption:='kırklareli';
if image2.Canvas.Pixels[x,y]=rgb(175,175,253) then
 label1.Caption:='tekirdağ';
if image2.Canvas.Pixels[x,y]=rgb(174,175,252) then
 label1.Caption:='Uşak';
Cevapla