Button hareket ettirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
bay_e87
Üye
Mesajlar: 8
Kayıt: 03 Eki 2007 10:04

Button hareket ettirme

Mesaj gönderen bay_e87 »

Arkadaşlar ben delphide yeniyim

Resim

resimde görüldüğü gibi button 1 sağ saola gidecek mouse ile button 2 ise panalenin kenarlarına çarpacak ve button 1den sekecek ama ben bir türlü yapamadım

yardımcı olursanız sevinirim
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

öncelikle aramıza hoşgeldin....

sonrasında sana ilk yardımı şu linkle yapayım...


bak yaa yardım edeceğine nasihat çekio diyebilirsin. ama kural kuraldır...
şaka bi yana nerede takıldığını, nasıl bi sorunla karşılaştığını söylersen daha rahat yardım alırsın. sonuçta herkes kendi vaktinden zaman ayırıp cevap yazıo foruma... üzerine alınma ve kırılma sakın bu laflarıma, ama şunu da aklından çıkarma burası balıkçı dükkanı değil ama balık tutmayı öğrenebileceğin bi yer...


şimdi gelelim soruna;

delphide yenisin madem ayrıntılı anlatmaya çalışayım. dene olmazsa gene bakarız. tamam tamam kodları da hallederis merak etme

:lol:

sanırım DXBall tarzı bi şey yapacaksın. eğer öyleyse ;

bence buton1 yerine panel ve buton2 yerine de shape özelliği stCircle olan shape kullanabilirsin. sonra

forma 1 tane system tabından timer koy.

timerda 2 tane const integer tanımla (x1 ve y1 mesela)ve değerlerini 1 yap. sonra shape in panelin sol veya sağına kenarına ulaşıp ulaşmadığını kontrol et. ulaşmışsa x1:=-x1 yap aynı şekilde shape in panelin üst ucuna veya alttaki panelin üst ucuna ulaşıp ulaşmadığını kontrol et ve ulaşmışsa y1:=-y1 yap;

son olarak da shape in top ve left değerlerini güncelle. bu topun hareketi içindi.

alt taraftaki panelin hareketi için ise panel1 in mousemove eventinde


Kod: Tümünü seç

 panel2.Left:=Mouse.CursorPos.X-form1.Left-panel1.Left-round(panel2.Width/2);
gibi bir şekilde yapabilirsin....


biliyorum biraz karmaşık oldu ama gecenin bu saatinde anca bu kadar oluyo. bi bak sonra gene görüşürüz. hade kolay gele...
bay_e87
Üye
Mesajlar: 8
Kayıt: 03 Eki 2007 10:04

Mesaj gönderen bay_e87 »

saolasın kardeş bu siteyi sevdim yardımın için saol :wink:

ama shape in panelin sağına ve soluna ulaşma olayını anlıymadım :?

ve paneli hareket ettirmeyi yaptım tek shapein haketi kaldı
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

hımm. şimdi

shape panel1 içinde gezinecek ya;

yataydaki hareketi shape in solu (shape1.left ) 0 dan (panel1 in genişliği - shapein genişliği) boyunca olacak

düşeydeki hareketi ise

shape in üstü (shape1.top) 0 dan (raketin üstü - shapein yüksekliği) boyunca olacak.
(alttaki raketinle (panel2) carpmayı kontrol ediceksin normalde ama ilk başta rakete kadar düşünelim hareketi topa vuramayınca aşağı düşme hakkın yanması falan sonra düşünürüz)

timer da 2 tane const tanımlamıştık. x1 ve y1 die ilk değerleri 1 olsun demiştik.

bu arada project menusunden options dan açılan pencerede compiler tabında assignable typed constants ı işaretle ki bu constların değerini değiştirirken "left side cannot be assigned to" die hata vermesin

timer da yapacağımız iş 2 tane if le kontrol ve 4 tane atamadan ibaret

ilk if yatayda sınırlara ulaşıp ulaşmadığımızı kontrol edecek

yani shape in left i 0 dan küçükse veya (panel1 in genişliği - shape in genişliği) nden büyükse sınırdayızdır ve yataydaki hareketi ters yöne çevirmeliyiz (sağa gidiorsak sola; sola gidiyorsak sağa) bunu da yataydaki hareketimizi sağlayan x1 i -x1 yaparak sağlarız.

aynı şekilde 2. if de düşeyde sınıra ulaşıp ulaşmamayı kontrol edecek yani
shape in üstü 0 dan küçük veya (raketin üst noktası - shape in yüksekliği)

bu durumda da y1 i -y1 yapıp düşeyde yön değiştirmiş olacağız.

ve son atamalar shape in yeni konumu -> düşeyde y1 kadar yatayda x1 kadar konum değiştir yani sol ve üst noktaları güncelle...


bilmem anlatabildim mi. senden ricam anlayamadığın bi yer varsa ben anlamadım bu işi demektense neyi anlamadığını açıkca ifade etmen böylece daha kolay yardım alabilirsin.

ben bundan sonraki aşamaya bakıorum şimdi. panel1 içine duvarlar (panel ) yerleştirip topun onlara çarpmasını kontrol etme ve çarptığı duvarı silme... bu arada dxball dimi bu başka bişeyse söyle de ona göre bakalım :)
bay_e87
Üye
Mesajlar: 8
Kayıt: 03 Eki 2007 10:04

Mesaj gönderen bay_e87 »

Tamam Saolasın Hallettim yardımların için teşekkür ederim aslında delphinin o kadar zor olmadığını ve sadece mantığa dayalı bir program dili olduğunuda görmüş oldum ve bu arada yaptığım oyun evet dx ball gibi

tekrar yardımların için saol
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

bütün dillerde zaten durum aynı.
genel programlama mantığın lduktan sonra iş sadece sytax a ve dilin sınırlarına kalıo.

şimdi topu hareket ettirdin ya. aynen kenarlara çarpınca yön değiştirdiğin gibi
ortalara serpiştirdiğin duvarlara çarpmayı da kontrol edip çarpmışsam duvarı sil yada görünmez yap dersen sanırım bir adım daha atmış olcaksın.

sonrasında topun raketin altına düşme ve yanma durumu var. bi de puanlama yaptın mı tamamdır heralde....

hade kolay gele
bay_e87
Üye
Mesajlar: 8
Kayıt: 03 Eki 2007 10:04

Mesaj gönderen bay_e87 »

panelin içine bütün heşeyi koydum ama bir türlü shape yi panelin kenarında sektiremedim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Basit anlmada buraya kod yazsaydın daha fazla yardımcı olurduk. Nerede hata yaptığınız müneccimvari bir metodla çözemeyiz.

- Programcılık işi tasarım anında öngörü, operasyon anında kanıta dayanır. Vay be ne söz ama bunu bir yere yazmak lazım... :lol:

- Aslında işlem aşaıdaki kadar bişey... "Adım" sayısı nesnenin hareket aralığını belirler..

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
Const
  {$j+}
    x : Integer = 1;
    y : Integer = 1;
  {$j-}
  Adim = 5;
begin
  Shape1.Left := Shape1.Left + (x*Adim);
  Shape1.Top  := Shape1.Top  + (y*Adim);
  If Shape1.Left + (x*Adim) >= (Panel1.Width  - Shape1.Width ) then x := x*(-1);
  If Shape1.Top  + (y*Adim) >= (Panel1.Height - Shape1.Height) then y := y*(-1);
  If Shape1.Left + (x*Adim) <= 0  then x := x*(-1);
  If Shape1.Top  + (y*Adim) <= 0 then  y := y*(-1);
end;
Resim
Resim ....Resim
bay_e87
Üye
Mesajlar: 8
Kayıt: 03 Eki 2007 10:04

Mesaj gönderen bay_e87 »

dostum saolasın sorunu cidden çözdün tekrar ellerine sağlık

Kod: Tümünü seç

then x := x*(-1); 
then y := y*(-1);


kısmında "-1" yerine 1 demişim o yüzden sektiremedim

tekrar saolsın dostum ellerine sağlık
ertaneker
Üye
Mesajlar: 9
Kayıt: 11 Ağu 2010 06:42

Re: Button hareket ettirme

Mesaj gönderen ertaneker »

selam arkadaşlar

yeni bir konu açmaktansa burdan yazmayı uygun gördüm çünkü istediğim dx boll tarzına benzer bişey formadaki imageyi mausla tutup formun içerisinde istediğim yere sürüklemek istiyorum yardım ederseniz çok sevinirim... :?
ertaneker
Üye
Mesajlar: 9
Kayıt: 11 Ağu 2010 06:42

Re: Button hareket ettirme

Mesaj gönderen ertaneker »

yardıma gerek kalmadı olayı çözdüm arkadaşlar :D
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Button hareket ettirme

Mesaj gönderen conari »

ertaneker yazdı:yardıma gerek kalmadı olayı çözdüm arkadaşlar :D
Çözümü paylaşsaydınız :!: :!:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
ertaneker
Üye
Mesajlar: 9
Kayıt: 11 Ağu 2010 06:42

Re: Button hareket ettirme

Mesaj gönderen ertaneker »

Kod: Tümünü seç

implementation

{$R *.dfm}
var
  ilkx,ilky,a:Integer;

Kod: Tümünü seç

procedure TForm1.img2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   ilkx:=X;
   ilky:=Y;
   a:=1;
end;

Kod: Tümünü seç

procedure TForm1.img2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

if a=1 then
begin
  IF (img2.Left<0)  then
  BEGIN
     img2.left:=0;
  end;
  IF (img2.Left>(Form1.ClientWidth-img2.Width)) then
  begin
     img2.Left:=(Form1.ClientWidth-img2.Width);
  end;
  IF (img2.TOP<0) then
  begin
    img2.Top:=0;
  end;
  IF img2.Top>(Form1.ClientHeight-img2.Height) then
  BEGIN
    img2.Top:=(Form1.ClientHeight-img2.Height);
  end
  else
  begin
     img2.top:=img2.top+Y-ilky;
     img2.left:=img2.left+X-ilkx;
  end;


end;
birkaç gündür nete giremedim bu şekilde çözdüm. :bravo:
ertaneker
Üye
Mesajlar: 9
Kayıt: 11 Ağu 2010 06:42

Re: Button hareket ettirme

Mesaj gönderen ertaneker »

Arkadaşlar benim bir sıkıntım daha var yardım ederseniz sevinirim
yazmak istediğim projede forma sağ tıkladığımda yeni bir component yaratacak bunu yaptım ama yeni oluşturduğum componenti tutup hareket ettirmek istiyorum yani events kısmına müdahale edebilmek istiyorum
örnekle açıklayacak olursam masa üstünü düşünün sağtıklayıp yeni bir klasör oluşturacak o klasörü istediğiniz yere çekecek ve çift tıkladığında değişik işlemler yaptıracaksınız.

Bu arada delphide çok yeniyim :) umarım çok şey istemiyorumdur ve kodlarla yardımcı olursanız çok sevinirim :D
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Button hareket ettirme

Mesaj gönderen qamyoncu »

Örneğin bir button yaratalım ve button'un onClick olayını irdeleyelim:

Kod: Tümünü seç

procedure ButtonClick(Sender: TObject);
begin
ShowMessage('Kendi yarattığın '+(Sender as TButton).Name+' adlı butona tıkladın.');
//..
end;
Üstteki kendinin yazması gereken fonksiyon buttona tıklandığında olmasını istediğimiz olaylar. Bunu butonla bağdaştırmak için ise :

Kod: Tümünü seç

var
Btn: TButton;
begin
Btn:=TButton.Create(Owner);
//..
//..
Btn.OnClick:=ButtonClick;
Son satır işi bitirir. Afiyet olsun. :)
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Cevapla