22 Şubat 2014 Cumartesi

Action Script Kaynakları

Adobe Flex ile ilgilenmeye başladığımda doğal olarak action script ile tanıştım. Fakat ne yazık ki bu tanışma Türkçe olmadı. Çünkü yardım için internette arama yaptığımda hemen hemen hiç Türkçe kaynağa rastlamadım actionscript ile ilgili. Varolan bağlantılarda çoğu kez o an çok da işime yaramayacak bilgilerle karşılaştım. Elbette burada sözünü ettiğim, paylaşımda bulunulan bilgilerin işe yaramazlığı değil, benim o an işime yaramaması.

Aslında sorun biraz da benim Visual Basic deneyimlerim olmasından da kaynaklıydı. Çünkü actionscript ve özelde flex, alıştığım mantığa çok uymuyordu. Aynı şekilde internet kaynakları da visual basic kaynaklarındaki düzende değildi. Bu konuda hala böyle düşünüyorum. Artık actionscripte epeyce alıştığım halde, yine de kaynaklar açısından süregelen darlık ve varolan kaynakların sunumundaki özensizlik, beceriksizlik ve de yetersizlik hala rahatsız ediyor beni.

8 Şubat 2014 Cumartesi

VB ile DLL Oluşturma ve Kullanma: Excel Dosyası ile İletişim

Exceldeki işlemlerden, Excel dosyasının VBA Kod sayfasında yapacağımız düzenlemelerle haberdar olabiliriz. Bunun için kendi hazırlayacağımız bir DLL’den yararlanmak mümkün. Örnek olarak vereceğim DLL belirttiğimiz sabit bir yolda bulunan veritabanımıza, Excel dosyamız her kaydedildiğinde Kayıt Tarihi ve saatini ekleyecek.
            Öncelikle bir Veritabanımızın olması şart. Veritabanımızın ismi vtExcel. İçerisinde tek tablo var. Alanları KayıtNo(OtomatikSayı), KayıtTarihi(Metin), KayıtSaati(Metin) olan tablomuzun ismi tblKayıt. Veritabanımız “C:\” dizininde.
Yeni bir Proje Başlatıyoruz. Proje türü olarak ActiveX DLL ‘yi seçiyoruz. Projemize bir Class1.cls modülü eklenmiş durumda. Şimdi projemizin adını “ExcelKaydet”, Modülümüzün adını da “Kayıt” olarak değiştiriyoruz.

Modulümüzün içerisine istediğimiz kayıt işlemini gerçekleştirecek aşağıdaki fonksiyonu yazacağız:

VB ResEditörden Image kontrolüne Gif Dosyası Yükleme

ResEditör ile çalıştıysanız , buradan image kontrolüne resim yüklemek istediğinizde yalnızca Bitmap klasörüne kaydettiğiniz Bitmap türü dosyaları yükleyebildiğinizi görürsünüz. Image kontrolüne örneğin bir Gif dosyasını buradan yükleyemezsiniz. Onu ancak CUSTOM klasörüne alabilir, ama bu defa da Image kontrolüne LoadPicture metdu ile bu gif dosyasını yükleyemediğinizi görürsünüz. Modüle eklenecek aşağıdaki fonksiyon ile ResEditörün CUSTOM klasörüne alınmış gif dosyalarını uygulamanızda rahatlıkla kullanabilirsiniz.  Ben Image üzerine bir label yerleştirerek Image kontrolünü ışıklı bir buton olarak kullandım. Forma dizi olarak ayarlanmış iki Image ve iki label yerleştirdim. Labeller Image kontrollerinin tam üzerinde. (Image üzerinde Sağ tuşla Send To Back yaparak Labeli Image kontrolünün önüne getirebilirsiniz.). Name özellikleri lblCinsiyet ve imgCinsiyet. Bunları bir seçenek butonu olarak kullanacağım ve hangisi seçilmişse o aydınlanacak, diğeri kararacak ve seçim bir değişkene atanacak. lblCinsiyet caption’ları “KIZ” ve “ERKEK”. ResEditörde CUSTOM klasörüne daha önce biri parlak, diğeri donuk/karanlık olan aynı gif dosyasını 101 ve 102 olarak aktardım. ResEditör kullanımı sitedeki makaleler içerisinde olduğundan yazmadım. Oradan yeterli bilginin alınabileceğini düşünüyorum. Hepinize kolay gelsin.

VB Help Dosyası Açma

Private Sub HelpMe_Click()

RetVal = Shell("winhelp.exe " & App.Path & "\HELPFILE.HLP", 3)

End Sub

VB Sistem Registryden Nasıl Okunur Yazılır?

Registry girişine almak ve kaydetmek

‘girişe yazınız.
‘ HKEY_CURRENT_USER\Software\VB and VBA Program Settings\MyApp\Settings\

SaveSetting "MyApp", "Settings", "Left", 10

‘Debug penceresinden giriş ve çıkışları oku.Debug.Print GetSetting("MyApp", "Settings", "Left", 4)

Registry’de Windows API kullanımı

Option Explicit

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias _
"RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _
phkResult As Long) As Long

VB INI Dosyasından Okuma Yapmak

***** 16-bit Örnek *****



Project’inize 1 adet commandbutton ekleyin ve aşağıdaki kodu yazınız:

Declare Function GetPrivateProfileString Lib "kernel" (ByVal lpApplicationName _
As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal _
lpReturnedString As String, ByVal nSize As integer, ByVal lpFileName As String) _
As integer

Declare Function WritePrivateProfileString Lib "kernel" (ByVal _
lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As _
String, ByVal lpFileName As String) As integer

Sub Command1_Click()

Dim sData As String
Dim iDataLen As integer

VB MDI Form-Child Form

MDI FORM - ( Multiple Document Interface )

Aynı anda birden fazla formu açık tutmak için formlar kullanılır.
Bir projede bir tane MDI form olabilir, ancak birçok alt form (child) içerebilir.
Child formların MDIChild özellikleri True olarak değiştirilir.
MDI formların Minimize, Maximize, Close komutları kaldırılamaz.
Tüm child formlar sadece MDIform içerisinde hareket eder.
MDI form minimize edilince, içindeki child formlarla beraber minimize olur.
Child form maksimize olunca form başlığı ana form başlığı (title bar) haline gelir.
AutoShowChildren; True ise child formlar ana form açılınca otomatik olarak görünür.
Aktif durumdaki child formun menüsü ana form menüsü olarak görünür.
MDI formlara PictureBox ve Menü dışında nesne eklenemez.
                                                                     
ChldForm.Zorder 1
Parametre kullanılmamışsa ya da değeri 0 ise chldform ön planda
Parametresi 1 ise arka planda olacaktı

Açık olan childe formların listesi; menu editorde oluşturulan menulerden birinin WindowsList özelliği onaylanarak menü içerisinde gösterilebilir.

ActiveForm              : Aktif childe form
AutoShowChildren    : False - Dim ile child formlar load komutuyla gizli yüklenir
ScrollBars                 : Kaydırma çubukları
Arrange                    : Childe formaların MDI içerisinde dizilişini kontrol eder
                                   ( 1 - yatay, 2 - dikey, 3 - üst üste)

MDIForm1.Arrange vbTileHorizontal
MDIForm1.Arrange vbTilevertical
MDIForm1.Arrange vbCascade

CHILD FORM 

MDI form içerisine dahil edilmiş olan formlardır.
Formlar, MDIChild özelliği true değeri yapılarak child form yapılabilir.
Bir MDI form birçok alt form (child) içerebilir.
Çalışma anında projeye yeni Child form eklemek için projede yer alan childe formlar kullanılır.
     
Dim YeniChilde As New FormChilde1



VB Formlara İlişkin Örnek Kodlar

Formu Ortalamak 
Private Sub Form_Load()
         Left = (Screen.Width - Width) / 2     ‘ Ekran yüksekliğinden form yüksekliği
         Top = (Screen.Height - Height) / 2   ‘ çıkarılarak fark ikiye bölünüyor
End Sub

Private Sub Form_Load()
         Me.Move (Screen.Height - Me.Height)/2, (Screen.Width - Me.Width)/2
End Sub

Formu Sürekli En Üstte Tutmak 

(General)(Declaration)
Const HWND_TOPMOST = -1                    ' Form en üstte
Const HWND_NOTOPMOST = -2                            ' Normal
Const SWP_NOSIZE = &H1                       ' Form boyutları değiştirilemez
Const SWP_NOMOVE = &H2                                 ' Form taşınmaz
Const SWP_NOACTIVATE = &H10                         ' Form aktif yapılmaz
Const SWP_SHOWWINDOW = &H40          ' Pencere Görünür

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, _
                                                              ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
                                                              ByVal wFlags As Long)

Private Sub Form_Activate()
         SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0,  SWP_NOACTIVATE _
                                      Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

VB SDI Form - ( Single Document Interface )

Formun yüklenmesi sırasında Load olayı içerisinde bulunan kodunuzun daha aktif olması için kodun ilk satırına Me.Show eklenir böylece form otomatik olarak devreye girer.

AutoRedraw özelliğini hızlı form güncellemesine gereksinim duyulan noktalarda False yapılır.
Formlar gerekmedikçe bellekten Unload komutu ile silinmez. Ekranda gözükmesi istemiyorsa, Unload yerine Hide ile saklanır.
Bir form üzerinde farklı ad taşıyan en fazla 254 kontrol nesnesi bulunabilir. Aynı tür olanlar bir dizi şeklinde aynı ad ile indekslenerek kullanılabilir.

Formun çağrılıp gösterilmesi sırasında gerçekleşen olayların sırası;
Form_Initialize
Form_Load 
Form_Resize          
Form_Paint

VB PictureBox

Picture nesnesi yerine Image kullanımı sistem kaynaklarını artırır. Picture ya da Image nesnelerine yüklenecek resimlerin RLE formatında olması, daha hızlı bir ekran güncellemesi ve az bellek kullanımı sağlar. LoadPicture komutu ile resmin yüklenmesi "EXE" dosyasının daha küçük olmasını sağlayacaktır.

PictureBox - Özellikler



Align
Appearange
AutoRedraw
AutoSize
BackColor
BorderStyle
CausesValidation
ClipControls
Container
CurrentX
CurrentY
DataChanged
DataField
DataFormat
DataMember
DataSource
DragIcon
DragMode
DrawMode
DrawStyle
DrawWidth
Enabled
FillColor
FillStyle
Font
FontBold
FontItalic
FontName
FontSize
FontStrikethru
FontTransparent
FontUnderline
ForeColor
HasDC
HDC
Height
HelpContextID
HWnd
Image
Index
Left
LinkItem
LinkMode
LinkTimeout
LinkTopic
MouseIcon
MousePointer
Name
OleDragMode
OleDropMode
Parent
Picture
RightToLeft
ScaleHeight
ScaleLeft
ScaleMode
ScaleTop
ScaleWidth
TabIndex
TabStop
Tag
ToolTipText
Top
Visible
WhatsThisHelpID
Width

Align                    : PictureBox’un form üzerindeki yeri
AutoRedraw        : Kendini yeniden çizebilme
AutoSize              : PictureBox’un otomatik olark yüklenen resim
                                    boyutuna ayarlanması
CurrentX              : Fare işaretçisinin X kooordinatı

CurrentY              : Fare işaretçisinin Y koordinatı

7 Şubat 2014 Cuma

VB Ortak Özellikler

Align
 Kontrolün form üzerinde yerleşme pozisyonu
Alignment
 Yazının pozisyonu ( sağa dayalı, sola dayalı, ortada )
Appearange
 Düz yada 3 boyutlu görünümü denetler
Autosize
 İçeriğe göre boyutların otomatik olarak ayarlanması
BackColor
 Zemin rengi
BorderStyle
 Çerçeve sitili
Caption
 Başlık
DrawWidth
 Çizgi kalınlığı
Enabled
 Kullanılabilirlik
HelpContextID
 Yardım dosyası konu numarası
Font
 Font özellikleri
FontBold
 Font kalınlığı
FontItalic
 Fontun eğik yada düz oluşu
FontName
 Font tipi
FontSize
 Font büyüklüğü
FontStrikethru
 Fontun üst çizgzi
FontTransparent
 True - print komutu ile yazılan yazılar altta bir renk olmazsa yazı görülmez
FontUnderline
 Fontun alt çizgili olup olmadığı
ForeColor
 Text ya da grafiğin rengi
Height
 Yükseklik
HWnd
 Windows tarafından verilen referans numarası
Left
 Sol kenardan uzaklık
MouseIcon
 Fare ikonu
MousePointer
 Fare işaretleyicisinin şekli
Name
 Kontrol yada formun ismi
Parent
 Nesnenin ait olduğu diğer nesne
Picture
 Kontrol yada form içerisinde kullanılan resim
ScrollBars
 Kaydırma çubukları
TabIndex
 Tab tuşu için seçim sırası
TabStop
 Tab tuşu ile erişilebilirlik
Text
 Seçili elemanın metin bilgisi
ToolTipText
 Balon ipucu metni
Top
 Üst kenardan uzaklık
Value
 Değer
Visible
 Görünürlük
Width
 Genişlik


1 Inch = 1440 Twip = 2,54 cm

VB Mouse Event-Fare Olayları

MouseDown

Form yada kontrol üzerinde farenin herhangi bir tuşuna basılması olayı.

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

‘ Form üzerinde farenin bir tuşuna basılması ile yapılacak işlemler

End Sub

Sabit
Değer
İşlem
VbShiftMask
1
SHIFT tuşu basılı
VbCtrlMask
2
CTRL tuşu basılı
VbAltMask
3
ALT tuşu basılı

4
SHIFT+CTRL tuşları basılı

5
SHIFT+ALT tuşları basılı

6
CTRL+ ALT tuşları basılı

7
SHIFT+CTRL+ ALT tuşları basılı

VB Klavye Olayları

Tuş basımının aktif olmasa dahi form tarafından algılanması isteniyorsa formun KeyPreview özelliği True olmalıdır.

Sabit
Açıklama
vbCrLf 
CHR$(13)+(CHR$(10)
VbNullChar
Boşluk
VbLf
Yeni Satır Başına Geçiş CHR$(10)
VbBack
BackSpace CHR$(8)
VbCr
Satır Başı Chr$(13)

KeyDown

Tuşa basılması olayı. Aktif nesne tarafından algılanır. KeyUp olayından önce oluşur.

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

       ... ‘ Tuşa basılması ile yapılacak olan işlemler

    End Sub

VB Olaylar, Yordamlar ve Fonksiyonlar

Event Handler – Olay

Kullanıcı eylemleri sonucunda ortaya çıkan durumlara olay denir.  Farenin yer değiştirmesi, tuşa basılması, formun açılması gibi işlemlerin her biri bir olay sayılır. Visual Basic de programlama olaylar üzerine kuruludur.  Bunlar alt yordamlar şeklinde kodlanır.

Private Sub Command1_Click() ‘ Tuşa basılması olayı

‘ Olay gerçekleşince yapılacak işlemler

End Sub ‘ Bitiş satırı

Alt Yordamlar

Belirli bir görevi yada olayı yerine getirmek amacı ile yazılan küçük kod grubudur.

VB MsgBox-Mesaj Kutusu

Kullanıcıyı bilgilendirmeyi sağlar. Kullanıcıya elde edilen bilgi ve uyarı mesajlarını bildirmekte ya da seçimin onaylanmasını sağlamak için kullanılır.
  
Dim Sayı As Integer
Sayı = 45
MsgBox "Öğrenci sayısı" & Sayı
  
vbCrLf          CHR$(13)+(CHR$(10)
vbNullChar      Boşluk 
vbLf            Yeni Satır Başına Geçiş CHR$(10)
vbBack          BackSpace CHR$(8)
vbCr            Satır Başı Chr$(13)

uyarı = "Kayıt Siliniyor" + Chr$(13) + "Emin misiniz"         
Cevap= MsgBox(uyarı, 4, "Kayıt Silme")


MsgBox "Hatalı İşlem", vbCritical, "Mesaj Kutusu"

VB InputBox-Bilgi Giriş Kutusu

Kullanıcıdan bilgi alınmasını sağlar.

Bilginin girilebilmesi için yeni bir pencere açılacak ve bilgi girişini bekleyecektir.  Bilgi giriş penceresinden girilen bilgi String(karakter) türünde olacaktır. Sayısal olarak kullanılacak bilgini VAL fonksiyonu yardımıyla sayısal değere dönüştürülmesi  gereklidir.

Dim Ad As String
Dim  SıraNo As Integer
Ad = InputBox("Adınızı Giriniz","Bilgi Giriş penceresi")
SıraNo = Val(InputBox("Sıra No Giriniz"))



Ad = InputBox("Adınızı Giriniz","Bilgi Giriş penceresi", “Misafir”)