# Derma Temel Rehberi

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

## Derma Nedir?

Derma, Garry ve TAD2020 tarafından oluşturulmuştur ve oyun modunuz veya eklentiniz için ekran menüleri oluşturmanın en kolay yoludur.

Derma, kodunun yalnızca bir kez çalıştırılması gerektiği için vgui'den farklıdır, bu nedenle Derma kodunu ASLA [GM:HUDPaint](https://gmod.tr/wiki/GM:HUDPaint) veya benzeri fonksiyonların içine koymamalısınız, çünkü bunlar her karede çağrılır. Hayatınızı kolaylaştırmak için Derma kodunuzu bir fonksiyona sarmalı ve bir menü oluşturmanız gerektiğinde onu çağırmalısınız ve **her zaman** yerel değişkenler kullanmalısınız. Global bir işaretçi kullanmanız gerekiyorsa, onu spesifik veya bir tablo üyesi yapın. `DLabel = vgui.Create( "DLabel" )` kötü bir kodlama pratiğidir ve muhtemelen bir şeyin üzerine yazacaktır.

Derma [istemci taraflıdır](https://gmod.tr/wiki/States) ve sunucudan çağırmak isterseniz [net](https://gmod.tr/wiki/net) kütüphanesini kullanmanız gerekir.

Derma'nın yaşı nedeniyle, Garry's Mod'da bazı öğeler kullanımdan kaldırılmıştır, bkz. [VGUI_Element_List](https://gmod.tr/wiki/VGUI_Element_List#deprecatedpanels). Bu wikideki Derma sayfalarının çoğu işlevsel panellere yönlendirir.

## Başlarken

Yapmanız gereken ilk şey bir [DFrame](https://gmod.tr/wiki/DFrame) oluşturmaktır, çünkü bu, Derma'yı yerleştirmek için tabiri caizse tuvaliniz olacaktır.

### Kod

```lua
local Frame = vgui.Create( "DFrame" )
Frame:SetPos( 5, 5 )
Frame:SetSize( 300, 150 )
Frame:SetTitle( "İsim penceresi" )
Frame:SetVisible( true )
Frame:SetDraggable( false )
Frame:ShowCloseButton( true )
Frame:MakePopup()
```

### Çıktı

![](https://gmod.tr/api/uploads/wiki/79098edec73de792bcd3.png)

## Derma'yı Boyama

### Bu Nedir?

Derma, Lua kodlayıcısı için ne kadar yararlı olsa da, görünüşü oldukça çirkindir ve bazen gerçekten güzel görünen bir menü istersiniz. Bunu, her bir Derma öğesinde yapabileceğiniz panelin Paint fonksiyonunu geçersiz kılarak çözebilirsiniz. Fonksiyonu geçersiz kılmak, üzerine bir şey çizene kadar panelin görünmez olacağı anlamına gelir; mevcut panelin üzerine çizim yapmak isterseniz [PANEL:PaintOver](https://gmod.tr/wiki/PANEL:PaintOver) fonksiyonunu deneyebilirsiniz.

### Örnek Kod

```lua
local Frame = vgui.Create( "DFrame" )
Frame:SetTitle( "Test paneli" )
Frame:SetSize( 300,300 )
Frame:Center()
Frame:MakePopup()
Frame.Paint = function( self, w, h ) -- 'function Frame:Paint( w, h )' de çalışır
	draw.RoundedBox( 0, 0, 0, w, h, Color( 231, 76, 60, 150 ) ) -- Çerçeve yerine kırmızı bir kutu çizin
end

local Button = vgui.Create("DButton", Frame)
Button:SetText( "Bana tıkla, çok güzelim!" )
Button:SetTextColor( Color(255,255,255) )
Button:SetPos( 100, 100 )
Button:SetSize( 100, 30 )
Button.Paint = function( self, w, h )
	draw.RoundedBox( 0, 0, 0, w, h, Color( 41, 128, 185, 250 ) ) -- Mavi bir buton çizin
end
Button.DoClick = function()
	print( "Bana tıklandı!" )
end
```

### Çıktı

![](https://gmod.tr/api/uploads/wiki/95a538950cb236bf636e.png)

## Kullanıcı Girdileri

Onlardan nasıl veri alacağınızı bilmiyorsanız Derma menüleriniz pek işe yaramayabilir; bu veri kullanıcı tarafından yazılmış bir metin, bir düğme tıklaması veya bir onay kutusu olabilir.

Oyuncunun adını girebileceği ve enter'a bastığında tepki veren bir [DTextEntry](https://gmod.tr/wiki/DTextEntry) oluşturalım! Ardından girilen değeri daha sonra başvurmak üzere bir değişkene atayabilir veya hatta [net](https://gmod.tr/wiki/net) kütüphanesini kullanarak adlarını kaydetmek için sunucuya gönderebiliriz.

### Örnek Kod

```lua
local PlayerName = nil

local NameEntry = vgui.Create( "DTextEntry", Frame )
NameEntry:SetPos( 25, 50 )
NameEntry:SetSize( 75, 85 )
NameEntry:SetText( "Adınız" )
NameEntry.OnEnter = function( self )
	PlayerName = self:GetValue()
	print( "Bu kullanıcının adı "..PlayerName )
end
```

Şimdi diyelim ki oyuncunun bir renk seçmesini istiyoruz, bu renk oyuncu modelini veya sohbetteki adını renklendirmek için kullanılabilir ve ardından bir düğmeye basarak bunu onaylarlar.

### Örnek Kod

```lua
local ChosenColor = nil

local ColorPicker = vgui.Create( "DColorMixer", Frame )
ColorPicker:SetSize( 200, 200 )
ColorPicker:SetPos(50, 50)
ColorPicker:SetPalette( true )
ColorPicker:SetAlphaBar( true )
ColorPicker:SetWangs( true )
ColorPicker:SetColor( Color( 255, 255, 255 ) )

local ConfirmColor = vgui.Create("DButton", Frame)
ConfirmColor:SetText( "Bu rengi istiyorum" )
ConfirmColor:SetSize( 90, 30 )
ConfirmColor:SetPos( 100, Frame:GetTall() - 40 )
ConfirmColor.DoClick = function()
	ChosenColor = ColorPicker:GetColor() -- Kırmızı, yeşil, mavi ve alfa değerlerini bir Color nesnesi olarak alır

	PrintTable(ChosenColor)
	--[[ Yazdırır:
	r = 255
	g = 255
	b = 255
	a = 255
	]]
end
```

### Çıktı

![](https://gmod.tr/api/uploads/wiki/4d7161da05f433e11093.png)

## Ölçeklendirme

### Bu Nedir?

Garry's Mod oynayan herkes sizinle aynı çözünürlüğe veya monitör boyutuna sahip değildir ve bu nedenle Derma'nızı neredeyse herkesin monitöründe çalışacak şekilde oluşturmalısınız. Bunu, ilgili boyutlarını tamsayı olarak döndüren [ScrH](https://gmod.tr/wiki/Global.ScrH) ve [ScrW](https://gmod.tr/wiki/Global.ScrW) fonksiyonlarını kullanarak başarabilirsiniz. Projenize başlarken bu konuda endişelenmeniz gerekmez, çünkü sabit boyutlarla çalışmak daha hızlıdır, ancak Derma'nız oldukça büyükse bu çok önemlidir.

### Nasıl Yapılır?

Yapmanız gereken ilk şey monitör çözünürlüğünüzü bulmaktır, benimki 1920 x 1080 ve bu eğitim için bunu kullanacağım. Çözünürlüğünüzü bulmanın en kolay yolu [print](https://gmod.tr/wiki/Global.print) ve ekran boyutu fonksiyonlarını kullanmaktır.

Şimdi bu çerçeveyi oluşturduğumuzu ve oyuncunun ekranının ortasında olmasını ve buna göre boyutlandırılmasını istediğimizi varsayalım

```lua
MyFrame:SetSize( 400, 300 )
```

Bunu verimli bir şekilde yapmak için, istediğimiz boyutu ekran çözünürlüğümüze bölerek ve [ScrW](https://gmod.tr/wiki/Global.ScrW) ile [ScrH](https://gmod.tr/wiki/Global.ScrH) fonksiyonlarını kullanarak [Panel:SetSize](https://gmod.tr/wiki/Panel.SetSize) metoduna bir matematik işlemi koyabiliriz:

```lua
MyFrame:SetSize( ScrW() * 400/1920, ScrH() * 300/1080 )
```

Artık bu DFrame sizin çözünürlüğünüzde 400x300 olacak ve diğer tüm çözünürlüklerde de boyutlanacaktır. Daha sonra bu çerçeve üzerindeki bir DButton'ı, boyutunu çerçevenin boyutuna bölerek ölçeklendirebilirsiniz ve üst öğesine göre ölçeklenecektir.

Çizim kodundaki gereksiz işlemleri azaltmak için daha sonra statik hesaplamaları hesaplanmış değerlerle değiştirmeniz önerilir:

```lua
MyFrame:SetSize( ScrW() * 0.208, ScrH() * 0.277 )
```

## Kaynaklar

Ne yazık ki, Derma'daki çok sayıda fonksiyon nedeniyle hepsi henüz belgelenmemiştir, ancak kaynak kodunu kendiniz arayabilir ve bu fonksiyonların nasıl çalıştığını çözebilirsiniz! Çevrimiçi bir depoyu burada bulabilirsiniz: [https://github.com/garrynewman/garrysmod/tree/master/garrysmod/lua/vgui](https://github.com/garrynewman/garrysmod/tree/master/garrysmod/lua/vgui) veya yerel `Garry's Mod` dizininizdeki `garrysmod\lua\vgui` klasörüne bakabilirsiniz.

Tüm Derma öğelerinin bir listesi [burada](https://gmod.tr/wiki/VGUI_Element_List) bulunabilir.

- [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/Derma_Basic_Guide
