# VGUI için Sürükle ve Bırak

- **İngilizce aslı:** https://wiki.facepunch.com/gmod/Drag_and_Drop_for_VGUI
- **Çeviri tarihi:** 2025-09-08

## Sürükle ve Bırak

Bu, çok az belgelendiği için bir sürükle ve bırak eğitimidir. Çok kolaydır, ihtiyacınız olan tek şey iki paneldir: bir alıcı (receiver) ve bir bırakılabilir (droppable) panel.

### Nasıl Çalışır

[Panel:Droppable( string name )](https://gmod.tr/wiki/Panel:Droppable) 1 argüman alır:

- Name - Bırakma işlemine izin vermek için alıcının adıyla eşleşmelidir

[Panel:Receiver( string name, function callback, table menu = nil )](https://gmod.tr/wiki/Panel:Receiver) 3 argüman alır:

- Name - Bırakılabilir panellerle eşleşecek tanımlayıcı
- Callback - Sürükleme/bırakma gerçekleştiğinde çağrılan fonksiyon
- Menu Options - Sağ tıklama menüsü için string tablosu (isteğe bağlı)

Callback fonksiyonu şunları alır:

- self - Alıcı panel
- panels - Bırakılan panellerin tablosu
- dropped - Gerçekten bırakıldığında true, üzerine sürüklenirken false değerini alır
- menuIndex - Sağ tıklama menüsü kullanılıyorsa dizin (index)
- x,y - Alıcıya göre bırakma koordinatları

Aşağıdaki örnekte:

- Kırmızı panel yalnızca sağ çerçeveye bırakılabilir
- Yeşil panel her iki çerçeveye de bırakılabilir
- Bırakıldığında, paneller alıcı çerçevenin alt öğesi (child) olur

### Basit Örnek

İşte tek yönlü ve çift yönlü sürükle ve bırakmayı gösteren eksiksiz bir örnek:

```lua
-- Yan yana iki çerçeve oluştur
local left_dframe = vgui.Create("DFrame")
local right_dframe = vgui.Create("DFrame")

local w, h = 200, 300
local screen_w, screen_h = ScrW(), ScrH()
local x = screen_w / 2 - w - 10
local y = screen_h / 2 - h / 2

left_dframe:SetSize(w, h)
right_dframe:SetSize(w, h)
left_dframe:SetPos(x, y)
right_dframe:SetPos(x + w + 20, y)
left_dframe:SetTitle("Kaynak")
right_dframe:SetTitle("Hedef")
left_dframe:MakePopup()
right_dframe:MakePopup()

local red = vgui.Create("DPanel", left_dframe)
local green = vgui.Create("DPanel", left_dframe)
red:SetSize(50, 50)
green:SetSize(50, 50)
red:SetPos(20, 50)
green:SetPos(20, 120)

red.Paint = function(s, w, h)
   surface.SetDrawColor(120, 0, 0)
   surface.DrawRect(0, 0, w, h)
   draw.DrawText("Tek Yönlü", "DermaDefault", w / 2, h / 2, color_white, TEXT_ALIGN_CENTER)
end

green.Paint = function(s, w, h)
   surface.SetDrawColor(0, 120, 0)
   surface.DrawRect(0, 0, w, h)
   draw.DrawText("Çift Yönlü", "DermaDefault", w / 2, h / 2, color_white, TEXT_ALIGN_CENTER)
end

-- Panelleri sürüklenebilir yap
red:Droppable("one-way")
green:Droppable("two-way")

-- Yalnızca sağ çerçevenin tek yönlü bırakmaları almasını sağla
right_dframe:Receiver("one-way", function(self, panels, dropped, _, x, y)
   if dropped then
       panels[1]:SetParent(self)
       panels[1]:SetPos(x - 25, y - 25)
   end
end)

-- Her iki çerçevenin de çift yönlü bırakmaları almasını sağla
right_dframe:Receiver("two-way", function(self, panels, dropped, _, x, y)
   if dropped then
       panels[1]:SetParent(self)
       panels[1]:SetPos(x - 25, y - 25)
   end
end)

left_dframe:Receiver("two-way", function(self, panels, dropped, _, x, y)
   if dropped then
       panels[1]:SetParent(self)
       panels[1]:SetPos(x - 25, y - 25)
   end
end)
```

![ezgif-2-7f57a61ca1.gif](https://gmod.tr/api/uploads/wiki/51a7dd5e317cfef82170.gif)

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/Drag_and_Drop_for_VGUI
