Visual Basic 6.0 Rehberi (Türkçe)

Başlatan OG, 20 Mayıs 2006, 03:42:33

OG

Image (Görüntü nesnesi)

GÖRÜNTÜ (IMAGE)

Bir resmi görüntüleyebilen grafik tipte bir kontrol nesnesidir. Bu açıdan resim kutusuna (picture box) benzer. Fakat, resim kutusuna oranla daha az sistem kaynağı kullanılır. Mouse ile clicklendiği zaman, komut butonuna benzer özellik gösterir. Örneğin bir firma, firmanın logosunu görüntü nesnesi içine yerleştirerek, resim üzerine mouse ile click işlemi gerçekleştirildiğinde firma hakkında bazı bilgiler listeleyen bir tanıtım yazılımı oluşturabilir.


Görüntü Nesnelerinin Kullanılması

Görüntü denetimi (ön takısı genellikle img olur),ilerleyen bir kısımda açıklanacak olan resim kutusu hafif bir eşdeğeridir. ancak , resim kutusu denetiminin aksine görüntü denetimi başka nesneler için bir konteyner görevi göremez.
Bazı başka özellikleri de o kadar kapsamlı olmasadabir form üzerinde sadece bir resim görüntülemek istiyorsanız iyi bir tercihtir. görüntü denetimleri resim denetimlerine oranla çok az miktarda hafıza tüketir. Visual Basic ile gelen görüntü denetimi artık bitmap(BMP),simge (ICO),metafile (WMF),jpeg(JPG),ve gif(GIF) dosyalarını görüntüleyebilir. buda World Wide Web grafiklerinin olduğu gibi başka populer grafik programlarının grafiklerinin görüntülenmesini kolaylaştırır.

Görüntü Denetimi Özellikleri

görüntü denetimi çok sayıda özelliğe sahiptir,

Align
Appearance
Autosize
BorderStyle
Container
DataField
DataFormat
DataMember
DataSource DragIcon
DragMode
Enabled
Height
Index
Left
MouseIcon
MousePointer
Name
OleDragMode
OleDropMode
Parent
Picture
Stretch
Tag
Top
Visible
WhatsThisHelpID
Width


Align : Image'ın form üzerindeki yerini belirler
Autosize : Image boyutlarının resim boyutlarına göre otomatik ayarlanması
Stretch : Resmin Image boyutlarına otomatik olarak ayarlanması

Diğer çoğu grafik denetimindede olduğu gibi , grafiği picture özelliğinin değerini ayarlayarak eklersiniz . Herhalde buradaki en ilginç özellik strech'tir. Bu Boolen bir özelliktir , yani sadece True veya False değerlerini alır. strech özelliğinin değeri false yapıldığında (varsayılan değer), denetim için yerleştirilen resmin boyutlarını alır. Bu denetimin boyunu daha sonra değiştirirseniz, yüklenen resim yatay ve düşey boyut değişikliğinin oranlarına bağlı olarak ya kırpılır, ya etrafında boş bir alan kalır , yada bunların ikisi birden olur. ancak strech özelliğinin değeri true yaparsanız resmin boyutları denetimle birlikte değişir. bu şekilde resim yüklendikten sonra denetimin boyunu değiştirerek içindeki resmi daha büyük veya küçük , yada daha uzun veya basık hale getirebilirsiniz.bir resim denetiminin özelliği yoktur. buna en yakın özelliği Autosize'dir. bir resim kutusunun Autosize özelliğinin True ise denetim kendisini yüklenen resmin ebatlarına uyarlar. Ancak Strech özelliğin değeri True yapılmış ise görüntü denetiminin aksine, resim kutusunun boyu değiştirildiği zaman bile içindeki resim aynı kalır.

Görüntü Denetimi Olayları

Görüntü denetimi çok sayıda olay kullanmaz, olanlarında sadece birkaç tanesini belki kullanırsınız

Click
DblClick
DragDrop
DragOver MouseDown
MouseMove
MouseUp
OleDragDrop
OleDragOver
OleCompleteDrag
OleGiveFeedBack
OleSetData
OleStartDrag

Görüntü denetimleri bazen bir sürükleme-bırakma hedefi olarak kullanışlı olur. çünkü bunun içinde , denetimin üzerine bırakıldığında doğacak sonuç hakkında bir fikir veren bir resim bulundurabilirsiniz.

Görüntü Denetimi Yöntemleri

Drag
Move
OleDrag
Refresh
ShowWhatsThis
Zorder

Çalışma Anında Resim Eklemek
Private Sub Command1_Click()
Image1.Picture = LoadPicture("d:\depo\bjk.jpg")
End Sub


Çalışma Anında Resim Silmek
Private Sub Command1_Click()
Image1.Picture = LoadPicture("")
End Sub

Resmi Fare ile Küçültüp Büyütmek

(General)(Declalaration)
Private genisle As Boolean

Private Sub Form_Load()
Image1.Stretch = True
End Sub

Private Sub Image1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
genisle = True
End Sub

Private Sub Image1_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Not genisle Then Exit Sub
If (X >= 0) And (Y >= 0) Then
Image1.Move 0, 0, X, Y
End If
End Sub

Private Sub Image1_MouseUp(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
genisle = False
End Sub
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

OLE – Nesne Bağlama ve Yerleştirme Aracı

OLE İSTEMCİSİ (OLE CLİENT) (NESNE BİRLEŞTİRME)
(Object Linking and Embedding)

Nesneyi bağlama ve yerleştirme yöntemi, Windows işletim sistemince kullanılan bir teknolojidir. Bu teknoloji sayesinde, bir windows uygulama programı (Visual Basic 6.0) ile geliştirilen bir proje içine başka bir windows uygulama programından nesneler aktarmak mümkündür.

Kullanıcı Formu

Bu form programa ait kullanıcı arabiriminin oluşturulduğu yerdir. Yani tüm denetimler öncelikle bu form üzerüine yerleştirilir ve yerleştirilen denetimler bu forma ait birer nesne olarak çalışırlar. Burada oluşturulan form görüntüsü program çalıştığı zaman ekranda görülür. Bu form görsel dillerin özelliğidir. Bilindiği gibi aynı ekran görüntüsünü görsel olmayan program dillerinde oluşturmak çok zordur. Ayrıca programın ekran görüntüsünü program çalışırken de değiştirebiliriz. Projelerimizde birden fazla form kullanmak mümkündür. Formlar projelerimizin ana elemanlerıdır. Herhangi bir denetim elemanını form üzerine eklemek için öncelikle denetim araç çubuğundan ekleyeceğimiz elemanı fare ile seçeriz. Bu işlemden sonra elemanın konumu belirlenip fare yardımı ile elemanın görüntüsü belirlenen yere çizilir.


OLE (NESNE BAĞLAMA ve GÖMME ELEMANI)

OLE teknolojisini destekleyen iki program arasında bağlantı kurmayı sağlar. Bağlantının sonucunda veri transferi yapmak yada verileri kullanmak mümkün olmaktadır.

Data-OLE Örneği

Nesne Özellik Ayar

Data1 Connect Access
DatabaseName C:\DERS_2\Yetenek.mdb
RecordSource Artists

Text1 DataSource Data1
DataField Name

Text2 DataSource Data1
DataField Adress

Text3 DataSource Data1
DataField City

Text4 DataSource Data1
DataField State

Text5 DataSource Data1
DataField WorkPhone

.

Private Sub OLE1_Updated(Code As İnteger)
Command1 Caption
Private Sub Command1_Click()
End
End Sub

OLE örneği için bir OLE nesnesi ekleyelim. Nesne ekle diyalog kutusunda uygulamamıza bağlayabileceğimiz nesnelerin listesi görünmektedir.

Dosyadan Oluştur'u seçelim, Bağlayı seçelim, Gözat kutusundan C:\DERS_2\Satışlar_01xls dosyasını bulalım, Tamam'a tıklayalım.

Şimdide sağ alt köşeye yeni bir OLE nesnesi çizelim. Nesne ekle kutusunu iptal ile geçelim. C:\DERS_2 dizinindeki excel dosyasını açıp grafiği kopyalayalım. VB de forma yeni eklediğimiz OLE nesnesine sağ tıklayıp Paste Special diyelim. Özel yapıştır kutusunda Bağlantı Yapıştır 'ı seçelim
OLE2.Update
End Sub



OLE teknolojisini destekleyen iki program arasında bağlantı kurmayı sağlar. Bağlantının sonucunda veri transferi yapmak yada verileri kullanmak mümkün olmaktadır.


Action Özelliği

Nesne üzerinde çeşitli işlemlerin yapılmasını sağlar.

nesne.Action = değer

İşlemin alabileceği değerler şunlardır:

Değer İşlevi Metot

0 Gömülü nesne yaratır. CreateEmbed

1 Bir dosyada bağlı nesne yaratır. CreateLink

4 Nesneyi panoya kopyalar. Copy

5 OLE kontrolüne panodan veri yapıştırır. Paste

6 OLE kontrolü içindeki veriyi günceller. Update

7 Nesneyi üzerinden işlem yapmak için açar. DoVerb

9 Nesneyi kapatır. Close

10 Belirtilen nesneyi siler. Delete

11 Nesneyi veri dosyasına kayıt eder. SaveToFile

12 Nesneyi dosyadan yükler. ReadFromFile

14 İnsert Object iletişim kutusunu görüntüler. İnsertObjDlg

15 Paste Special iletişim kutusunu görüntüler. PasteSpecialDlg

17 Nesnenin desteklediği işlemleri günceller. FetchVerbs

18 Bir nesneyi OLE 1.0 formatında kayıt eder. SaveToOle1File


OLE DRAG & DROP

OLEDragMode

Taşıma işleminin nasıl yapılacağını belirler.
0, vbOLEDDragAutomatic : Bu modda sürükleme işlemi otomatik olarak başlatılır.
1, vbOLEDDragManual : Bu modda sürükleme işlemini başlatmak için OLEDrag metodu kullanılmalıdır.


OLEDropMode

Bırakma işleminin nasıl yapılacağını belirler.
0, vbOLEDropNone : Nesne bırakma işlemini desteklemeyecek.
1: vbOLEDropManual : Bırakma işlemi program kodu ile yapılacak.
0 : vbOLEDropAutomatic : Bu modda hiçbir koda gerek kalmadan bırakma işlemi gerçekleştirilebilir.

Eğer bir kontrolün hem OleDragMode ve hem de OleDropMode özellikleri otomatik değerleri destekliyorsa bu kontrollere hiçbir kod yazmanız gerekmez. Sadece bu iki özelliğe Automatic değerlerini vermeniz yeterlidir.

ÖRNEK: Örnek olarak programınıza iki tane text kutusu yerleştirin ve her ikisinde de bu özelliklerini Automatic olarak ayarlayıp programı çalıştırın. Bu iki kutu arasında seçtiğiniz kısmı taşıyabileceğiniz gibi bu kutulardan seçip OLE Drag&Drop işlemlerini destekleyen diğer uygulamalara da taşıyabileceğinizi veya oradan bu kutulara taşıyabileceğinizi göreceksiniz.

Formunuzun üzerine bir FileListBox koyup OleDragMode özelliğini Automatic yaparsanız artık buradaki dosyalardan seçip istediğiniz bir yere taşıyarak oraya kopyalayabilirsiniz. Örneğin masa üstüne veya Explorer de bir dizine bırakarak oraya kopyalanmasını sağlayabilirsiniz. Hatta FileListBox'un MultiSelect özelliğini 1 veya 2 yaparak birden fazla dosyayı aynı anda istediğiniz yere kopyalayabilirsiniz.

Aynı şekilde bie PictureBox'un bu iki özelliğine Automatic değerini vererek diğer uygulamalardaki resimleri getirip PictureBox üzerine bırakabilirsiniz. Bu işlemler sırasında Ctrl tuşuna basılı tutarsanız sürüklediğiniz şey karşı tarafa kopyalanır, bu tuşa basılı tutmadan sürüklerseniz oraya taşınır.

Methods

OLEDrag( )

Eğer OleDragMode özelliği otomatik olarak belirlenmişse taşımaya başlama işlemi bu metodla yapılır.

Events

OLEStartDrag (Data As DataObject, AllowedEffects As Long)

Sürükleme işlemi başladığında bu olay meydana gelir.

OLECompleteDrag (Effect As Long)

Drag-Drop işlemi tamamlandığında veya iptal edildiğinde bu olay meydana gelir.
Effect parametresi ile sonuç hakkında bilgi alınabilir. Örneğin bilgi karşı tarafa kopyalandı mı, taşındı mı bu bilgi Effect parametresi ile öğrenilir. Effect parametresinin alacağı değerler şunlardır:

1 : vbDropEffectCopy
2 : vbDropEffectMove
3 : vbDropEffectNone

OLEDragDrop (Data As DataObject, Effect As Long, Button As İnteger, Shift As İnteger, X As Single, Y As Single)

OLEDropMode özelliğine Manual verilmişse bırakma işlemi gerçekleştiğinde bu olay meydana gelir.

OLEDragOver (Data As DataObject, Effect As Long, Button As İnteger, Shift As İnteger , X As Single, Y As Single, State As İnteger)

OLEDropMode özelliğine Manual verilmişse sürükleme işlemi gerçekleşirken bu olay meydana gelir.

OLEGiveFeedback (Effect As Long, DefaultCursors As Boolean)

Bu olay, OLE kaynağının sürükle ve bırak işlemi esnasında fare şeklinin değişmesi gerektiği durumlarda meydana gelir.

DataObject

OLE Drag&Drop olayında sürüklenen bilginin formatı aşağıdaki değerlerden biri olabilir.

Sayısal Sembolik Anlamı

-16640 vbCFLink Bağlantı bilgisi, DDE bağlantı bilgisi
-16639 vbCFRTF RTF metni, formatlı metin bilgisi
1 vbCFText Text, formatsız metin bilgisi
2 vbCFBitmap BMP, bitmap türü resim bilgisi
3 vbCFEMetafile WMF, windows metafile türü resim bilgi
8 vbCFDIB DIB, DIB formatlı resim bilgisi
9 vbCFPalette Palet bilgisi
15 vbCFFiles Windows explorer dosya adı


Properties

Count,Files (İndex)

Sürükleme işlemindeki Datalar dosya isimleri ise, yani vbCFFiles formatında ise bu özelliklerle sürüklenen dosya sayısı ve her bir dosyanın ismi öğrenilip değiştirilebilir.

Methods

Clear ( )

Datanın içeriği silinir.

GetData (Format As İnteger)

Format parametresi ile belirlenen bilgiyi öğrenmek için kullanılır.

GetFormat (Format As İnteger) As Boolean

Datanın format parametresi ile belirlenen formatı destekleyip desteklemediği bu özellikle öğrenilir. Geriye dönen değer True ise o bilgi formatttadır.

SetData ([Bilgi], [Format)]

Taşınacak bilgi ve bu bilginin formatı bu metodla belirlenebilir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

CommonDialog – Genel Diyalog Penceresi

COMMON DIADLOG
The following notes are meant to help you use the Visual Basic® CommonDialog Control. More complete details concerning this contraol can be found in the Visual Basic Help Topic ComonDialog Control.
The CommonDialog Control presents a standard program interface for common operations such as
• Opening and Saving files,
• Setting print options,
• Selecting colors and fonts, and
• Displaying help
Adding the Common Dialog Control to the ToolBox
The Common Dialog Control must be added to the ToolBox before it can be used. In design mode, select the Object View for your project. Either right click the ToolBox with your mouse and choose Components or select the Menu command Project Components. This will open a dialog box similar to that in Figure 1,

Figure 1 -- Selecting Components
Scroll through the list of compnents until finding the Microsoft CommonDialog Control. Check the CheckBox for this control as shown in Figure 2 and click the Okay Button. This will add the CommonDialog Control icon to the ToolBox.

Figure 2 -- Selecting the Common Dialog Control Component
You may now add one or more CommonDialog Controls to your form in the same manner as any other control. As CommonDialog Controls are added to a form, they will have the default name ComonDialog1, ...
Something Unusual
When you execute a project, you expect to be able to see your controls unless their Visible property has been set to False. But, you won't see a CommonDialog Control when you execute a project. And, if you look at its properties, you won't see any Top, Left, Height, Width, Visible properties. That's because the CommonDiialog Control is not a visible control. You won't see anything until you execute one of its methods. When it is used, you will see a Dialog Box that you can interact with.
By the way, the CommonDialog Control is also unusual in that it does not have any events.
Using the CommonDialog Control
The CommonDialog provides a set of standard interfaces to control certain common tasks. Figures 1 and 2 are examples of a Dialog Control that, in this case, is designed to allow you to determine which components should be a part of a Visual Basic project. The CommonDialog Control provides Dialog boxes for six specific types of activities. How a CommonDialog Control is used is determined by which of its methods you invoke. So, first, the CommonDialog Control methods.
Method Purpose
ShowOpen used to display a Dialog Box designed to allow the user to select one (or more) files from among those accessible to a spacific computer. Typically, your program will use the selected file(s) for input purposes.
ShowSave used to specify the name and location of a, possibly new, file on your sytem. Generally used to identify the file that will be used to store program outputs.
ShowColor presents the user with a palette of colors from which a selection can be made.
ShowFont Presents the user with a selection of the fonts on the system, the sizes supported for these fonts and the ability to indicate a combination of styles such as Bold or Italic.
ShowPrinter allows the user to select from the primnters known to this sysstem and to set certain properties of the selected printer.
ShowHelp runs WinHelp32.exe and displays the specified help file. This allows you to bring up specific portions of Windows help or even dsign your own help system.
Let's build a small project to illustrate using the CommonDialog Control. Open Visual Basic. Add the Microsoft CommonDialog Control to the project using the method outlined above. Put one Text Box and One Command button on the form. Your form should look like Figure 3

Figure 3 -- The Form
Finally code the Command Button Click event as
Private Sub Command1_Click()
CommonDialog1.ShowColor ' Display Color Dialog
Text1.BackColor = CommonDialog1.Color ' Change Text background
End Sub
When you run the project and click on the Command Button, the CommonDialog Control's Color Dialog Box will be presented as in Figure 4.

Figure 4 -- The Color Dialog Box
Click on any of the colors and then click the Color Dialog Box Okay button. The background of the Text box should change to the selected color.
What Happens?
The CommonDialog Control allows you to make a number of different selections when a Dialog Control is invoked with one of the six methods above. The selection(s) that you make change one or more of the CommonDialog Controls properties. In the case of the ShowColor Method, the selected color is returned as the value of the property Color. This property may then be used in your program. In this case, we use the selected color to define a new value for the background of the Text Box.
CommonDialog Control Properties
Each of the CommonDialog Control methods presents you with a standard interface to accomplish certain objectives. Once your selection(s) have been made, these are returned using one or more of the CommonDialog Control's properties. Thus, the properties are used to return the selections to your program, where they can be used as appropriate. Certain properties of the CommonDialog Control can also be used to change the behavior/appearance of the Dialog Controls. For example, add a second Command Button to your form and code its Click event as
Private Sub Command2_Click()
CommonDialog1.ShowFont ' Pop up Font Dialog
Text1.FontName = CommonDialog1.FontName ' Change Text font
Text1.FontSize = CommonDialog1.FontSize ' Change size
Text1.FontBold = CommonDialog1.FontBold ' Bold?
Text1.FontItalic = CommonDialog1.FontItalic ' Italicize
End Sub
When you try to run this program, what happens? As written, you will get a run-time error message telling you that no fonts are installed on your PC. Don't despair. You have fonts installed. After all, you're looking at this. If you were to look at the VB Help screen for the ShowFont Method, you would see the following remark
Before you use the ShowFont method, you must set the Flags property of the CommonDialog control to one of three constants or values: cdlCFBoth or &H3, cdlCFPrinterFonts or &H2, or cdlCFScreenFonts or &H1. If you don't set Flags, a message box is displayed advising you that "There are no fonts installed," and a run-time error occurs.
You have to tell the CommonDialog Control whether to display Printer fonts, Screen fonts or both types of fonts before you execute the ShowFont method. Change the second Command Button's Click event to
Private Sub Command2_Click()
CommonDialog1.Flags = cdlCFBoth ' Printer & Screen fonts
CommonDialog1.ShowFont ' Pop up Font Dialog
Text1.FontName = CommonDialog1.FontName ' Change Text font
Text1.FontSize = CommonDialog1.FontSize ' Change size
Text1.FontBold = CommonDialog1.FontBold ' Bold?
Text1.FontItalic = CommonDialog1.FontItalic ' Italicize
End Sub
Now, what happens to the text box when you click Command Button 2? Try several different font, size, italic and/or bold combinations. (Some of the more unusual fonts are Webdings and Wingdings. )
Remember
You use a CommonDialog Control Method to display one of the Dialog Boxes. You set the values of one or more CommonDialog proerties before invoking the method to control the behavior of the Dialog Box. And, the selections made are returned to you as the value(s) of one (or more) properties of the CommonDialog Control. Unless/until you use these changed properties, nothing happens beyond displaying the Dialog Box.
Some of the More Important Properties
Color This is a 4-byte (32 bit) value of type Long which identifies the color selected in response to the ShowColor method. If you look up the VB Help topic Color Constants, you can get a feeling for some of these values. One value you might want to remember is &H8000000F, which is the default gray background color used by VB for forms, Label Boxes, Command Buttons, etc. (See below for a note about Hexadecimal values.)
FontBold
FontItalic
FontStrikethru
FontUnderline These four properties are Boolean values (i.e., each is either True or False). They are set when the ShowFont method is invoked. Most VB controls that display text have similarly named properties. So these CommonDialog Control properties can be used to change the manner in which text is displayed.
FontName The name of the font that was selected using the ShowFont method.
FontSize The size selected when using the ShowFont method.
DialogTitle Used in conjunction with the ShowOpen and ShowSave methods to determine the text displayed in the Title Bar of the Dialog Box. Must be set prior to executing the method.
Flags This property is used to determine how a Dialog Box will be configured/behave when executed. It must be set prior to invoking the method. For example, setting Flags to one of the constant values cdlCFBoth, cdlCFPrinterFonts or cdlCFScreenFonts prior to executing the ShowFont method determines whether you may select from both the installed printer and screen fonts, only the installed printer fonts or only the installed screen fonts. The prefix cdl indicates this is a CommonDialog Control constant. CF means it applies to the ShowFont method.
Setting the Flags property to cdlCCFullOpen prior to executing the ShowColor method displays a Color Dialog Box that displays a section for defining Custom Colors.
I recommend you look at the VB Help Topic CommonDialog Control Constants to see the full range of possible values for the Flags property.
Some Notes on Hexadecimal Values
At this point, take a couple of seconds and bring up the VB Help Topic CommonDialog Control Constants. You'll see these constants are grouped according to the CommonDialog Control method they apply to. Take a look at the constant cdlCFEffects. The table shows you that its value is the hexadecimal numer &H100. (The prefix &H denotes this is a hexadecimal value. The 100 is the hexadecimal value.) So, why use hexadecimal numbers? Because they are a convenient representation of Binary values - the values that computers use and understand. The following table shows the 16 hexadecimal digits their binary and decimal equivalents.
Hexadecimal
Digit Binary
Value Decimal
Value
0 0000 0
1 0001 1
2 0010 2
3 0011 3
4 0100 4
5 0101 5
6 0110 6
7 0111 7
8 1000 8
9 1001 9
A 1010 10
B 1011 11
C 1100 12
D 1101 13
E 1110 14
F 1111 15
Having memorized the information in the preceeding table, you can easily convert hexadecimal numbers to their binary equivalents and back again. (Yes, if you want to be a serious progammer, you should memorize the table.) For example, the value &100 is the binary number 0001 0000 0000. All you need to do is replace each hexadecimal digit by its four digit binary equivalent. The reverse process can be used to convert binary numbers to hexadecimal. For example, the binary number 100111011 is converted by first appending three leading zeros to it to get 000100111011. (You want the number of digits to be a multiple of four.) Then, group it four bits at a time to get 0001 0011 1011. Finally use the table above to convert it to &13B as the equivalent hexadecimal value.
We now know the CommonDialog Control constant cdlCFEffects is equal to &100 or the binary number 0001 0000 0000. When the CommonDialog Flags property is set to cdlCFEffects (&100), then Font dialog box will include options for Strikethrough, Underline and Color. Now let's use this to our advantage. A second CommonDialog Control Constant is cdlCFScreenFonts whose value is &1 hexadecimal or 0001 binary. When it is set, the Font Dialog displays only screen fonts. What we would like to do is display a Font Dialog Box that displays only screen fonts and allows for these effects. So, first build a new form that is similar to Figure 5, which contains a Command Button, a Text Box and a CommonDialog Control.

Figure 5 -- A Simple Form
Next, code the Command Button Click event as:
Private Sub Command1_Click()
CommonDialog1.Flags = cdlCFScreenFonts Or cdlCFEffects
CommonDialog1.ShowFont
Text1.FontName = CommonDialog1.FontName
Text1.FontSize = CommonDialog1.FontSize
Text1.FontBold = CommonDialog1.FontBold
Text1.FontItalic = CommonDialog1.FontItalic
Text1.ForeColor = CommonDialog1.Color
Text1.FontStrikethru = CommonDialog1.FontStrikethru
Text1.FontUnderline = CommonDialog1.FontUnderline
End Sub
Finally, run the project and click the Command Button. Select the Courier font and some combination of the other properties. What happens to the text box? Try some other combinations using the Font Dialog Box. If you got a run-time error, most likely it is because you did not select a font. Try again and make certain you select a font first.
The key to what just happend is the statement
CommonDialog1.Flags = cdlCFScreenFonts Or cdlCFEffects
which sets the Flags property prior to executing the ShowFont method. Or is a boolean operator. It performs a bitwise logical Or of the two operands. The following table shows what Or does.
Or Operand
Operand 0 1
0 0 1
1 1 1
The above statement says to Or the values &H1 and &H100. Doing this bit by bit yields
cdlCFScreenFonts &H1 0000 0000 0001
cdlCFEffects &H100 0001 0000 0000
Result &H101 0001 0000 0001
So the CommonDialog Control's Flag property is set to the hexadecimal value &H101. If you look it up, you will see that the Flag property is of type Long (i.e., occupies 32 bits or 4 bytes of memory. Each of those 32 bits can be set to either 0 or 1 to indicate that a certain option should or should not be set when the ShowFont method is executed. Numbering the bits from 0 on the right to 31 on the left, when bit 0 is set to 1, then the Font Dialog displays Screen Fonts. If bit 0 is set to 0, then the screen fonts are not displayed. When bit 8 is set to 1, the strikethrough, underline and color effects are enabled. When bit 8 is set to 0, they are not. In a similar manner, you can set other bit patterns to 0 or 1, as desired, by setting the Flags property to the logical Or of the appropriate constants. Or, you can simply execute a statement similar to
CommonDialog1.Flags = &H273
Which sets the Flags property to the 32 bit pattern 0000 0000 0000 0000 0000 0010 0111 0011 - enabling some combination of options. Do remember that the Flags property must be set prior to executing the method. And, the meaning of a specific bit changes dending on the method executed.
Show Open & ShowSave
The methods we are most interested in are ShowOpen and ShowSave, which are typically used to allow access to files. Let's assume you have written a program that opens a file and reads information from that file. Within your code, you might have code similar to the following:
Private Sub ReadFile_Click()
Dim FileNum As Integer
FileNum = FreeFile
Open "c:\temp\downloads\abc.dat" For Input As FileNum
'
' remainder of procedure
'
End Sub
The above will work as written. However, it does make an assumption that the file abc.dat resides in the folder c:\temp\downloads\ on whatever PC you are using. While hardcodign a file name into a program can be useful, it can also lead to problems. Should you move this code to a different PC, it is extremely unlikely that this file would be found in a folder named \temp\downloads. Indeed, there may be no such folder on the PC the code is moved to. What you would like is to allow the user to be able to specify both the name and the location of the file to be used by the program. One excellent way to do this is to use the CommonDialog Control ShowOpen method. We begin by taking a look at several properties of the CommonDialog Control and how they relate to the ShowOpen and ShowSave methods.
Name Explanation
Flags Setting the Flags property prior to executing either the ShowOpen or ShowSave method changes the behavior of the method. This property must be set before executing the ShowOpen or ShowSave method to be effective. Some of the more used CommonDialog Control constants for these methods are:
cdlOFNFileMustExist
(value = &H1000) If set, the user can enter only the names of existing files as the file name box for the Dialog Box.
cdlOFNHelpButton
(value = &H10) If set, the Dialog Box will display a Help button in addition to the default Okay and Cancel buttons.
cdlOFNPathMustExist
(value = &H800) If set, allows the user to enter only valid (existing) paths.
DialogTitle Changes the Title of the Dialog Box to whatever you specify. Can be particularly useful in establishing a context for the user.
FileName Has meaning both before and after executing the ShowOpen or ShowSave methods. If set before executing either method, it determines the directory and file displayed in the Dialog Box when the method is executed. After either method has been closed by clicking the Okay button, the FileName property is the complete drive, path and filename of the selected file. This can now be used in your code.
Filter Determines the types of files that will be displayed in the file list box of the Dialog Box. By default, all files are displayed. Setting the Filter to *.txt would display only those files with the extension txt. Setting the Filter to *.htm;*.html would display files with extension of either htm or html.
CancelError The default value for this property is False. When it is set to True, prior to executing a method, error number 32755 is returned if the user clicks the Cancel button of the Dialog Box. In conjunction with error trapping, this can be used to determine whether the user clicked the Cancel button or the Okay button.
Now, let's put all of this to productive use. Your program expects the input file to be named abc.dat and to reside in the folder c:\temp\downloads\. But, you recognize that it may be in some different folder and might even have a different name than abc.dat. So, you want your program to prompt the user for the file name and location. You also want to guard against the possibility of the user specifying the name of a non-existent file or clicking the Cancel button. We'll get there by steps.
In Visual Basic, create a new project. Add the CommonDialog Control to the ToolBox. Put a Command Button and a CommonDialog Control on the form. Change the Name of the Command Button to cmdOpenFile. Name the CommonDialog Control cdlOpenFile. Finally, switch to code view and paste the following into your program.
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
Now run the program and click the Command Button. Figure 6 shows what you should see on your screen - except that the names of the files and directories on your PC will not be the same as the one this was taken from.

Figure 6 -- The ShowOpen Dialog Box
Figure 6 shows that the current folder/directory is programs. Both the File Name and Filter Boxes are empty. Using your example, click on any file. The name of the file should now appear in the File Name Box. Click the Okay button and a message box showing the value of CommonDialog Control's Filename property will be displayed in a Message Box. Finally, that file will be opened by your Visual Basic program although it will not be obvious to you.
Now, let's deliberately generate an error. Run the project again and click the Command Button. When the Open File Dialog displays, click the File Name Box and type in a file name of xcvbassde.gtre or something else equally nonsensical. The important thing here is to choose the name of a non-existent file. Once that is done, click the Okay Button. The Message Box will pop up with the complete file name. Your program should then yield a run-time error number 52 Bad file name or number. The problem is that the Open statement can only successfully open files that exist. The attempt to open a non-existent file caused the run-time error. What we have to do is force the user to choose from among only those files that exist on her/his PC. Change your program's code for the Click event by adding the indicated line below:
Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.Flags = cdlOFNFileMustExist ' new line just added
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
Run the program and click the command button. What happens when you try to select a file that does not exist? By setting the Flags property to cdlOFNFileMustExist, you are reconfiguring the ShowOpen method to only allow the user to select from among files that actually exist on the disk. Until one is chosen, the user cannot get out of the Open Dialog by clicking the Okay button.
Let's make the control a little fancier. Add the line marked below to your code: (Be careful! Blank spaces count in this example.)
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.Flags = cdlOFNFileMustExist
cdlOpenFile.Filter = "All Data Files (*.dat)|*.dat|All Files (*.*)|*.*" ' new line
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
If everything worked correctly, you should see something like Figure 7.

Figure 7 -- Using a Filter
Figure 7 shows significantly fewer files than Figure 6. And, all of the files shown share the same extension of .dat. You see the message All Data Files (*.dat) in the Filter Box. These text characters are meant for human consumption. The control is displaying files according to the mask *.dat, which means display all files no matter what their name so long as the extension is dat. Since only four files satisfied this mask on my PC, I only saw four files in Figure 7. Now click on the Filter Box drop down arrow. You can choose either all data files (*.dat) or all files (*.*). Select all files and you should see something similar to Figure 6 above with many more files displayed. When you set the Filter property, you must provide Visual Basic with a text display to prompt the user and the mask that is to be matched. The text to be displayed and the match are separated from each other by | the "pipe" character. You can have as many different filter values as you wish so long as all are separated from each other by this "pipe" character.
Let's give the user a little prompt as to what the Open Dialog is meant to accomplish. So, add another line to your code as shown below:
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.DialogTitle = "Open the Employee Data File" ' new line
cdlOpenFile.Flags = cdlOFNFileMustExist
cdlOpenFile.Filter = "All Data Files (*.dat)|*.dat|All Files (*.*)|*.*"
cdlOpenFile.ShowOpen
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
Run the program and click the Command Button. The value of the DialogTitle property determines what you will see displayed in the dark blue title bar of the Dialog Control. By changing it, you can provide the user with a visual prompt of what file she/he is trying to open.
Time for another error. Run the program, click the command Button and immediately click the Cancel button. The Message Box shows you that the value of the CommonDialog COntrol FileName property in the null string. And, the program dies with run-time error number 75 Path/File access error. It's time to correct that. This time, you need to add several statements to your program as shown below.
Option Explicit
Dim FileNum As Integer

Private Sub cmdOpenFile_Click()
FileNum = FreeFile
cdlOpenFile.DialogTitle = "Open the Employee Data File"
cdlOpenFile.Flags = cdlOFNFileMustExist
cdlOpenFile.Filter = "All Data Files (*.dat)|*.dat|All Files (*.*)|*.*"
cdlOpenFile.CancelError = True ' new line
On Error Resume Next ' new line
cdlOpenFile.ShowOpen
If Err.Number = cdlCancel Then ' new line
MsgBox "Cancel button clicked" ' new line
Exit Sub ' new line
End If ' new line
On Error GoTo 0 ' new line
MsgBox cdlOpenFile.FileName
Open cdlOpenFile.FileName For Input As FileNum
End Sub
The first new statement tells says that the CommonDialog Control should generate run-time error number 32755 if the Cancel button is clicked. Under normal circumstances, this is would be a fatal error. Visual Basic would report the error number and a descriptive error message to you and ask whther you wanted Help, to End the program ar to Debug the program. The second statement turns off Visual Basic's normal run-time error trapping by saying that, if a run-time error occurs, the program should resume at the statement immediately after the one which caused the run-time error. It now becomes your responsibility to "trap" run-time errors and determine what should happen. This error trapping is done by the If statement which come immediately after the ShowOpen method that might cause the run-time error to occur. Err is an object that is available to all Visual Basic programs. Its Number property is equal to zero so long as no run-time error occurs. When a run-time error does occur, the Number property is set to a predetermined positive value. The Desription property is set to a short text description of the error that may (or may not) be helpful. The program explicitly tests to see whether the error number is 32755. (Yes, that's the value of the CommonDialof Constant cdlCancel.) If it is, an appropriate message is displayed and the procedure is exited. Should Err.Number be any value other than 32755 (including zero), the progam continues. Finally, the last new statement above returns responsibility for error trapping to Visaul Basic. This should always be done whenever you use an On Error Resume Next statmeent in your program. Failure to do so may lead to catastrophic results.
That's it. You now have a fairly robust ShowOpen procedure.

COMMON DIALOG TÜRKÇESİ

Bu örnekte CommonDialog kullanımını ve aynı zamanda API'lerin kullanımını öğrenecegiz. Visual Basic'de bir proje yaratın. Form üzerine 3 tane Command button yerleştirin.
Bunlardan 1 cisinin yandaki özellikleri belirtilen şekilde degiştiriniz. Name:open Caption : open
2 cisinin Name:exit Caption : exit yapınız.
3 cüsünün Name:play Caption : play yapınız.
Form üzerine bir adet'te Commondialog yerleştirin ve Name:Cdialog1 yapınız.
Formun en altına bir Textbox yerleştirin ve text özelligini boş bırakınız.



Daha sonra kod penceresindenGeneral Declarationsalanına aşagıdaki kodu girin.

Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _ (ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long Dim SoundBuffer As Long


Butonların click eventlerinede aşagıdaki kodu giriniz.


Private Sub play_Click()
If CDialog1.filename <>"" Then
SoundBuffer = sndPlaySound(CDialog1.filename, &H2)
If SoundBuffer <>1 Then
MsgBox "File doesn't play.", , "Error"
End If
Else CDialog1.ShowOpen
Text1.Text = CDialog1.filename
End If
End Sub


Private Sub open_Click()
CDialog1.ShowOpen
Text1.Text = CDialog1.filename
End Sub


Private Sub exit_Click()
End
End Sub


Artık programımız çalışmaya hazırdır. Şimdi API kullanımını biraz anlatmaya çalışalım.
Aşagıdaki API Winmm.dll dosyasında bulunan bir fonksiyondur. Declare deyimi ile biz bu fonksiyonu programımızda kullanacagımızı belirtiyoruz. sndPlaySound bizim kullanacagımız fonksiyonun adıdır.
Lib "xxxx" alanı ise bu fonksiyonun kayıltı oldugu library'nin ismidir. Alias alanı ise bu fonksiyonun lib deki takma adıdır. Daha sonra gelen parantez içindeki alanlar ise bu fonksiyona geçilecek olan parametrelerdir. Parantezden sonraki ifade ise fonksiyonun geriye ne tip değer döndürecegini belirten bir parametredir.

Herhangi bir API kullanmak istersek bunu mutlaka Declare deyimi ile programda tanımlamalıyız.

Private Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _ (ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long

API kullanımı ile ilerliyen haftalarda bir ders anlatılacagı için burada fazla üzerinde durmuyoruz.

CommonDialog kullanılması için ise form üzerine bir commondialog nesnesini yerleştirmemiz gerekiyor.Program çalıştırılınca CommonDialog penceresi form üzerinde gözükmez. Biz istedigimiz zaman gösterebiliriz. CommonDialog nesnesi üzerinde aşagıdaki işlemlerden birini uygulayabiliriz.

Cdialog1.Showopen : Bu özellik ile kullanıcıdan açılmak üzere bir dosya seçmesini saglayabiliriz.
Cdialog1.Showsave : Bu özellik ile kullanıcıdan herhangi bilgilerin kaydedilebilecegi bir dosya seçmesini saglayabiliriz. Cdialog1.Showcolor: Bu şekilde kullanıcı önüne renk paletini getirerek kullanıcının bir renk belirtmesini sağlayabiliriz. Cdialog1.Showfont : Bu ifade ile ise kullanıcıdan sistemde yüklü herhangi bir font özelligini seçmesini sağlayabiliriz. Cdialog1.ShowPrinter : Bununlada kullanıcının yüklü olan printerlardan birini seçmesini sağlayabiliriz.

Common Dialog

Project-->Components-->Microsoft Commont Dialog Control `ü components`i seçin . CommonDialog1`i formunuza ekleyin .
Project-->Project1 Properties (? Hangi proje ismini vermişseniz )-->Help File Name `den hazırlamış olduğunuz *.hlp ( ? Hangi help dosya ismini vermişseniz ) dosyasını giriniz . App nesnemizin HelpFile özelliği tasarım aşamasında set edilmiş olur . Ayrıca setup hazırlarken help dosyalarını da otamatik olarak ekletmiş oluruz .

Forma Components
Sub Command1_Click()
With CommonDialog1
.HelpFile=App.HelpFile
.HelpCommand=11 'içindekiler sekmesini görüntüler
.ShowHelp
End With
End Sub
‘*******Herhangi bir konu sayfasına erişmek istersek
Sub Command2_Click()
With CommonDialog1
.HelpFile=App.HelpFile
.HelpContext=1
.HelpCommand=1 'HelpContext = 1 numaralı konu sayfasının görünmesi
.ShowHelp
End With
End Sub


Common Dialog (Diyalog Pencereleri)

Microsoft Common Dialog 6.0 Componenti seçilir. Aç, Kaydet, Renk, Help, Yazdır ve Font diyalog kutularının çıkartılmasını sağlar.

CommonDialog1.Action = 1 Aç
CommonDialog1.Action = 2 Yeni Adla Kaydet
CommonDialog1.Action = 3 Renk
CommonDialog1.Action = 4 Font
CommonDialog1.Action = 5 Yazdır
CommonDialog1.Action = 6 Help

CommonDialog1.Action = 1 Aç

CancelError

Dosya aç kutusunda iptal düğmesine basılınca uyarı vermez.

CancelError = False

Flags

Dosya açma özelliklerini etkiler.

Flags = 1 Aç kutusu üzerinde tek eleman seçilebilir ve salt okunur kutusu seçili.
Flags = 2 Aç kutusu üzerinde tek eleman seçilebilir ve salt okunur kutusu seçili değil.
Flags = 4 Aç kutusu üzerinde tek eleman seçilebilir ve salt okunur kutusu olmaz
Flags = 256 Aç kutusu üzerinde tek eleman seçilebilir.
Flags = 512 Aç kutusu üzerinde birden fazla eleman seçilebilir. Win 3.1 gibi olur.
Flags = 4096 Klasörde olmayan bir dosya açılırsa hata kodu verir.

DialogTitle

Dosya aç kutusunun ismini değiştirir.

DialogTitle = "Dosya Aç"





DefaultExt

Dosya uzantısı belirtilmezse bile otomatik olarak uzantıyı ekler.

DefaultExt = "dat"

FileName

Dosya aç kutusunda açılmasını istediğiniz dosyalar.

FileName = "*.txt"

Filter

Dosya aç kutusunda açılmasını istediğiniz dosyalar.

Filter= "Text dosyaları (*.txt)|*.txt|Bitmap(*.bmp)|*.bmp|Tüm resimler(*.jpg;*.wmf;*.ico)| *.jpg;*.wmf;*.ico|Tüm dosyalar(*.*)|*.*|"

Filterİndex

Dosya aç kutusunda açılmasını istediğiniz dosyalardan defult olarak gelmesini istediğinizi yazarsınız. İlk sıradaki 1 numaradır.

CommonDialog1.FilterIndex = 2

İnitDir

Dosya aç kutusunda default olarak açılmasını istediğiniz diyrectory.

CommonDialog1.InitDir = "c:\program files"

CommonDialog1.Action = 2 Kaydet

Flags = 2 Kaydet kutusunda aynı isimli dosyaları kaydederken uyarı verir.

CommonDialog1.Action = 3 Color

Flags = 2 Color kutusunda ayrıntılarda açılır.
Flags = 4 Ayrıntılar gizlenir.

CommonDialog1.Action = 4 Font

Flags = 1 Screen Fontslar gelir.
Flags = 2 Printer Fontslar gelir.
Flags = 3 Tüm Fontlar gelir.
Flags = 257 Font kuusunda özellikli gelir.
Flags = 258 Font kuusunda özellikli gelir.
Flags = 8192 Min-Max arasında bir değer girilmezse uyarı verir.
Flags =131074 Font kutusunda yalnız TTF fontlar gözükür.
Flags =131330 Font kutusunda yalnız TTF fontlar gözükür ve özelliklidir.

CommonDialog1.Min = Minimum değer
CommonDialog1.Max = Maxsimum değer

CommonDialog1.Action = 5 Print

PrinterDefault = True ise varsayılan printerin ayarları aktif olur.
Copies = Kopya sayısı verilir.

Flags = 1 Yazdır kutusunda Seçili seçili olur.
Flags = 2 Yazdır kutusunda sayfalar seçili olur.
Flags = 4 Yazdır kutusunda Seçili kısım pasif olur.
Flags = 8 Yazdır kutusunda Sayfalar pasif olur ve harmanla açılır.
Flags = 16 Yazdır kutusunda Tümü seçili olur ve harmanlama şekli açılır.
Flags = 32 Yazdır kutusunda Dosyaya yazdır seçili olur.
Flags = 64 Yazdır kutusunda Yazıcı ayarları görünür.
Flags = 2048 Yazdır kutusunda Help menüsüde görünür.
Flags = 524288 Yazdır kutusunda Dosyaya yazdır kutusu pasif olur.
Flags = 1048576 Yazdır kutusunda Dosyaya yazdır ekranda olmaz.

Orientation = 1 Dikey 2 Yatay olur.

Örnek 1

Aç,Kaydet, Renk , Print, Font

Private Sub ac_Click()
On Local Error Goto hata
Dim a
CommonDialog1.Filter = "metin|*.txt|"
CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Input As #1
Text1.Text = ""

While Not EOF(1)
Line Input #1, a
Text1 = Text1.Text + a + Chr(13) + Chr(10)
Wend
Close #1
Exit Sub
Hata:
Exit Sub

End Sub

Private Sub font_Click()
CommonDialog1.FontName = Text1.FontName
CommonDialog1.FontSize = Text1.FontSize
CommonDialog1.FontBold = Text1.FontBold
CommonDialog1.FontItalic = Text1.FontItalic
CommonDialog1.FontUnderline = Text1.FontUnderline
CommonDialog1.FontStrikethru = Text1.FontStrikethru
CommonDialog1.Color = Text1.ForeColor
'Bu kodları font CommonDialog1 açıldığınıda
'Text kutusunun özelliklerinin otomatik olarak gelmesini sağlar.

CommonDialog1.Flags = 257
CommonDialog1.ShowFont

Text1.FontName = CommonDialog1.FontName
Text1.FontSize = CommonDialog1.FontSize
Text1.FontBold = CommonDialog1.FontBold
Text1.FontItalic = CommonDialog1.FontItalic
Text1.FontUnderline = CommonDialog1.FontUnderline
Text1.FontStrikethru = CommonDialog1.FontStrikethru
Text1.ForeColor = CommonDialog1.Color

End Sub

Private Sub color_Click()
CommonDialog1.Flags = cdlCCPreventFullOpen
CommonDialog1.ShowColor
Text1.BackColor = CommonDialog1.Color
End Sub

Private Sub print_Click()
CommonDialog1.Flags = &H40
CommonDialog1.ShowPrinter
Printer.Print Text1
Printer.EndDoc
End Sub

Private Sub kay_Click()
Dim a
CommonDialog1.DialogTitle = "Kaydet"
CommonDialog1.DefaultExt = "txt"
CommonDialog1.Flags = 2
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
a = Text1
Print #1, a
Close #1
End Sub

UYGULAMA 2
Windows ortamında kullandığınız programlarda sık sık kullandığınız iletişim
kutularının ve yine windows işletim sisteminin kullanıcıya büyük kolaylıklar sağlayan
"Drag-Drop" yani "Sürükle-Bırak" özelliğinin kullanımı Visual Basic ortamında oldukça
kolaydır. Şimdi gerçekleştireceğimiz uygulama, windowsun bu iki özelliğinin
kullanımında giriş yapma amacındadır.
Şekil 2.1
1. Visual Basic ‘de yeni bir proje çalışmasına başlandığında , şekil 2.1 de
görülen ve programımızın görünen yüzü olan "Form 1" projeye otomatik olarak
eklenir. Şekil 2.1 de görülen form bir standart Microsoft formudur.
Command1
Command2
Command3
Label1
Command4
Command5
TextBox1
Shape2
Image1
Frame1
Image3
Shape1
Common
Dialog1
Image2
Şekil 2.2
2. Toolbar penceresini kullanarak formumuza 5 tane "Command Button", 1
tane "Label", 1 tane "Textbox", 1 tane "Frame", 3 tane "Image" ve 2 tane "Shape"
nesnesi ekleyin.
Şekil 2.3
3. Ayrıca formumuza 1 tane "CommonDialog" kontrolü eklememiz gerekiyor.
Ancak bu kontrol toolbar pencerenizde bulunmayabilir. "CommonDialog" kontrolünü
toolbar penceresine eklemek için, öncelikle toolbar penceresine sağ kliklenmeli ve
açılan pencereden "Components" işlevi seçilmelidir. Bu seçim ile şekil 2.3 de görülen
pencere ekrana gelecektir. Components penceresinde bulunan ve kontrollerin
isimlerinin yer aldığı listeden, " Microsoft Common Dialog Control" seçeneğinin
yanında bulunan kutu işaretlenmesi ve daha sonra "Uygula" butonuna basılması ile
"CommonDialog" kontrolünün simgesi toolbar üzerinde yer alır.
Şekil 2.4 Şekil 2.5
Şekil 2.6
4. Formumuza eklediğimiz Shape1 ve Shape2 nesnelerinin geometrik
şekillerini "Properties" penceresini kullanarak değiştireceğiz. Shape1 nesnesinin
geometrik formunun çember olması için , shape1 seçili konumda iken properties
penceresindeki shape1 nesnesinin "Shape" özelliğini "3-Circle" olarak değiştirin.
(Şekil 2.4)
Shape2 nesnesi ise şekil 2.6 da görüldüğü gibi yuvarlak köşeli dikdörtgen
formundadır. Bunun için ise yine shape2 nesnesi seçili iken properties
penceresinden, nesnenin "Shape" özelliği "4-Rounded Rectangle" olarak değiştirilir.
5. Shape1 ve shape2 nesnelerinin iç kısımlarını herhangi bir renk ile
doldurabilmek için öncelikle her ikisi içinde properties penceresinden "BackStyle"
özelliklerinin "Opaque" olarak değiştirilmesi gerekir. Daha sonra yine properties
penceresinden "BackColor" özelliği kullanılarak istenilen renk seçimi yapılır.
Uygulamamızda paletten beyaz renk seçilerek nesnelerin şekil 2.6 daki
görünümleri kazanması sağlanmıştır. Ayrıca nesnelerin bu zemin renkleri üzerine
"FillStyle" ve "FillColor" özellikleri kullanılarak düz, desenli dolgular yapılabilir.
Şekil 2.7
6. Form üzerindeki formun, command butonlarının, label nesnesinin ve text
kutusunun başlıklarını şekil 2.7 de görüldüğü gibi değiştireceğiz. Bu işlem için daha
önceki uygulamamızda olduğu gibi yine properties penceresinin kullanacağız.
Command butonlarının,formun ve labellerin başlık özelliğini properties pencersinde
"Caption" özelliği kontrol eder.
Textbox kontrolü ise yazı girdi kontrolü olarak kullanıldığı için, textbox
içerisinde bulunan yazı, properties penceresinde yer alan "Text" özelliği ifade eder.
Şekil 2.7 de görülen başlıklar bu nesnelerin properties penceresindeki ilgili özellikleri
karşısındaki kutulara girilir.
7. Windows ortamında çok sık kullanılan command butonların zemin renginin
değiştirilmesi, başlığının yazı karekterinin değiştirilmesi gibi görsel işlemler Visual
Basic ‘de olanaklıdır. Örneğin bu uygulamamızda command1 nesnesinin properties
penceresinden "Style" özelliğini "1-Graphical" yapıp daha sonra "BackColor" özelliği
ile herhangi bir renk seçerek Şekil 2.7 de görüldüğü gibi değiştirelim. Ayrıca başlığın
yazı karekterini değiştirmek için "Font" özelliğini kullanılır.
Şekil 2.8
8. Command1 nesnesinin "Drag-Drop" özelliğinden yararlanmak için bu
nesnenin "DragMode" özelliğini properties penceresinden "1-Automatic" olarak
değiştirin.
9. Formumuzun oluşturulmasında son işlem basamağı olarak image1 ve
image2 nesnelerine resim ataması yapacağız. Image3 nesnesine ise bu basamakta
herhangi bir resim ataması yapmayacağız. Bunun nedeni ise aşağıda kod yazımında
anlaşılacaktır. İlk olarak image1 nesnesine atama yapalım. Bunun için properties
penceresinde image1 nesnesinin özellikleri arasında yer alan "Picture" özelliğine
tıklamalı ve daha sonra açılan diyalog penceresinden atanacak resim dosyası
seçilmelidir. Aynı işlemi image2 nesnesi içinde yapmalısınız. Uygulamada image1
nesnesine boş bir çöp kutusu, image2 nesnesine ise dolu çöp kutusu resmi
atanmıştır.(Şekil 2.8)
10. Artık programımızın kod yazım basamaklarını gerçekleştireceğiz. Bu
işleme command2, command3, command4, command5 nesnelerinin tıklama
olaylarını yazarak başlayacağız. Öncelikle önceki uygulamamızda olduğu gibi kod
yazım penceresini ekrana getirin.
Şekil 2.9
11. Kod penceresinin nesneler kısmından "Command2" ‘yi seçin. Kod
penceresinin olaylar kısmından ise "Click" olayını seçin. Bu seçim ile otomatik olarak
"Private Sub Command2_Click()" ve "End Sub " satırları görülecektir. Command2
nesnesinin klik olayı için kodlarımızı aşağıda görüldüğü gibi bu iki satır arasına
yazacağız.
Private Sub Command2_Click()
CommonDialog1.ShowColor
Command2.BackColor = CommonDialog1.Color
Form1.BackColor = CommonDialog1.Color
Text1.BackColor = CommonDialog1.Color
End Sub
Programımızın kullanıcısı command2 butonuna tıkladığında yukarıda
görülen satırlardaki işlemler, aşağıdaki gibi sırasıyla yerine getirilecektir.
"CommonDialog1.ShowColor" satırı, commondialog1 kontrolümüz
bünyesinde bulunan renk seçimi iletişim kutusu ekrana gelmesini sağlayacak. (Şekil
2.9)
Diğer 3 satır ise sırasıyla command2,form1 ve text1 nesnelerinin zemin
rengini, renk seçimi iletişim kutusundan seçilen renk yapacak.
Şekil 2.10
12. Command3 nesnesinin "Click" olayı için aşağıdaki kodlar yazılmalıdır.
Private Sub Command3_Click()
CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects
CommonDialog1.ShowFont
Label1.Font.Name = CommonDialog1.FontName
Label1.Font.Size = CommonDialog1.FontSize
Label1.Font.Bold = CommonDialog1.FontBold
Label1.Font.Italic = CommonDialog1.FontItalic
Label1.ForeColor = CommonDialog1.Color
Label1.FontStrikethru = CommonDialog1.FontStrikethru
Label1.FontUnderline = CommonDialog1.FontUnderline
End Sub
"CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects" satırı ile "Standart
İletişim Kutusu Bayrakları" terimi karşımıza çıkmaktadır. Bu bayraklar yardımıyla
iletişim kutularının çeşitli ayarlarını yapabiliriz. Örneğin bu satırla, yazı tipi iletişim
kutusunda, ekran ve yazıcı için kullanılabilecek yazı tiplerinin yer alması için
"cdlCFBoth" bayrağı kullanılmıştır. Eğer bu bayrağı kullanmamış olsaydık iletişim
penceresinde herhangi bir yazı tipi olmazdı. "cdlCFEffects" bayrağını ise yazı tipi
iletişim kutusunda çizgi, altçizgi ve renk efektlerinin yer alması için kullandık.
"CommonDialog1.ShowFont" komut satırı, yazı tipi iletişim kutusunun
ekranda görülmesini sağlayacak. (Şekil 2.10)
Diğer satırlar ise label1 nesnesinin sırasıyla yazıtipi, yazı tipi boyutu, kalın ve
eğik yazı stili, rengi, üstü çizili ve alt çizgi özelliklerini, iletişim kutusundan seçilen
özelliklere göre değiştirirler.
Şekil 2.11
13. Command4 nesnesinin "Click" olayı için aşağıdaki kodlar yazılmalıdır.
Private Sub Command4_Click()
CommonDialog1.ShowSave
End Sub
Yazdığımız bu tek komut satırı ile şekil 2.11'de görülen kayıt iletişim
kutusunun ekranda görülmesi sağlanır. Bu iletişim kutusu için ekrana getirilmesi
dışında herhangi bir kod yazılmadığı için iletişim kutusunda yapılan seçimlerin
program üzerine herhangi bir etkisi olmayacaktır.
14. Command4 nesnesinin "Click" olayı için aşağıdaki kodlar yazılmalıdır.
Private Sub Command5_Click()
CommonDialog1.ShowPrinter
End Sub
Bu satırda ise yazıcı iletişim kutusunun ekranda görülmesi amaçlanmıştır.
Ancak bilgisayarınıza yüklü bir yazıcı yoksa, program hata mesajı verecektir.
Yukarıda olduğu gibi bu iletişim kutusu için de ayrıca herhangi bir kod yazılmadığı
için iletişim kutusunda yapılan seçimlerin program üzerine herhangi bir etkisi
olmayacaktır.
15. Fare, form üzerinde gezdirilirken herhangi bir ektuşla yada ektuş
olmadan, farenin butonlarının birisine basıldığında devreye girecek olan kodlar,
aşağıdaki gibi form nesnesinin "Mouse Down" olayına yazılmalıdır.
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
If Shift = vbShiftMask Then
CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects
CommonDialog1.ShowFont
Text1.Font.Name = CommonDialog1.FontName
Text1.Font.Size = CommonDialog1.FontSize
Text1.Font.Bold = CommonDialog1.FontBold
Text1.Font.Italic = CommonDialog1.FontItalic
Text1.ForeColor = CommonDialog1.Color
Text1.FontStrikethru = CommonDialog1.FontStrikethru
Text1.FontUnderline = CommonDialog1.FontUnderline
End If
If Shift = vbCtrlMask And Button = vbLeftButton Then
CommonDialog1.ShowPrinter
End If
If Shift = vbAltMask And Button = vbRightButton Then
CommonDialog1.ShowColor
Command2.BackColor = CommonDialog1.Color
Form1.BackColor = CommonDialog1.Color
Text1.BackColor = CommonDialog1.Color
End If
End Sub
Yukarıda anlatılan olay gerçekleştiğinde, yukarıdaki 3 şart kontrolü
yapılacaktır.
If Shift = vbShiftMask Then ve End If satırları arasındaki komutlar eğer "Shift
= vbShiftMask " şartı sağlanmış ise gerçekleşecektir. "Shift = vbShiftMask" şartı ise
şudur: Fare tıklandığında, klavyede basılı olan tuş (Shift), klavyenin shift tuşu
(vbShiftMask) olmalıdır. Yani form üzerinde herhangi bir yerde shift tuşuna basarak
farenin herhangi bir butonuna basıldığında, bu iki satır arasında yazılı olan komutlar
gerçekleşecektir. Aradaki bu komutların işlevi ise işlem basamağı 12'dekilerle aynıdır.
If Shift = vbCtrlMask And Button = vbLeftButton Then ve End If satırları
arasındaki komut ise eğer "Shift = vbCtrlMask " ve "Button = vbLeftButton " şartları
sağlanmış ise gerçekleşecektir. Burada yukarıdaki satırdan farklı olarak iki şart
istenmiştir. Şartlar ise şunlardır: Fare tıklandığında, klavyede basılı olan tuş (Shift),
klavyenin ctrl tuşu (vbCtrlMask) ve farenin tıklanan butonu sol buton " Button =
vbLeftButton" olmalıdır. Yani form üzerinde herhangi bir yerde ctrl tuşuna basarak
farenin sol butonuna basıldığında, bu iki satır arasında yazılı olan komutlar
gerçekleşecektir. Aradaki bu komutun işlevi ise işlem basamağı 14' de anlatıldı.
If Shift = vbAltMask And Button = vbRightButton Then ve End If satırları
arasındaki komut ise eğer "Shift = vbAltMask " ve "Button = vbRightButton " şartları
sağlanmış ise gerçekleşecektir. Burada ise istenen şartlar şunlardır: Fare
tıklandığında, klavyede basılı olan tuş (Shift), klavyenin alt tuşu (vbAltMask) ve
farenin tıklanan butonu sağ buton " Button = vbRightButton" olmalıdır. Aradaki
komutun anlamı ise işlem basamağı 11' de anlatıldı.
16. Formun yüklendiğinde, shape nesnelerinin bazı özelliklerinin
değiştirilmesi için aşağıdaki kodları yazmalıyız. Kodlar form nesnesinin "Load"
olayına yazılmalıdır.
Private Sub Form_Load()
Shape1.DrawMode = 16
Shape2.FillStyle = 7
Set Shape1.Container = Frame1
Image2.Visible=False
Image3.Visible=False
End Sub
İlk satır ile shape1 nesnesinin çizim şekli yani "DrawMode" özelliği 16 ya
eşitlenerek "Whiteness" seçilmiştir. Böylece shape1 nesnemiz tamamen beyaz
görünecektir. İkinci satır ise shape2 nesnesinin içinin dolduruluş şeklini yani "FillStyle"
özelliğini 7 ‘ye eşitleyerek, nesnenin içini çapraz çizgilerle dolduracaktır. Bu iki işlemi
kod yazmaya gerek kalmaksızın properties penceresinden de yapabiliriz.
Üçüncü satırda ise shape1 nesnesinin frame1'e bağlı olduğu belirtiliyor. Bu
satırla artık frame1, shape1'i kapsar. Shape1, frame1 in dışına çıkamaz.
Son iki satırda, nedeni daha sonraki işlem basamaklarında anlatılacak olan
image2 ve image3 nesnelerinin görünmezliği sağlanmıştır.
17. Kod yazımında gerçekleşen son olay ise; fare form üzerinde
gezdirilirken, farenin x ve y koordinatlarına bağlı olarak nesneler üzerinde
gerçekleşecek olaylardır. Bunlar için aşağıdaki kodlar formun "Mouse Move" olayına
yazılmalıdır.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Shape1.FillColor = RGB(X / 10, Y / 10, 30)
Shape2.FillColor = RGB(Y / 10, X / 10, 30)
Shape1.Move X + 100, Y + 100
Frame1.BackColor = RGB(X / 10, Y / 10, 255)
If X > 3000 Then
Shape2.BorderWidth = X / 500
End If
End Sub
Öncelikle şu bilinmelidir ki, formumuzun şimdi kullanmış olduğumuz "Mouse
Move" olayında, farenin koordinatları "x" ve "y", kullanıldıysa fare butonu "Button" ve
kullanıldıysa ektuş "Shift" değişkenleriyle tanımlanmıştır ve bu değerler temsil ettikleri
olaya göre otomatik olarak değerlerini kazanırlar.
İlk iki satırla shape1 ve shape2 nesnelerinin dolgu renkleri farenin x,y
koordinatlarına bağlı kılınmıştır. RGB renk modu üç ana renkten oluşur. Bunlar
sırasıyla kırmızı, yeşil ve mavidir. Bütün renkler bu üç rengin çeşitli oranlarda karışımı
ile oluşur. Bu üç rengin her biri 0 ve 255 arası değerler alırlar. "255", O rengin en açık
tonunu; "0" ise en koyu tonu olan siyahı; ara değerler ise ara tonları verir. Bunun
sonucunda her üçü de 0'a eşit olduğunda ortaya çıkan renk siyah, her biri 255 olursa
ortaya çıkan renk beyaz olur.
Biz ilk satırda sahpe1 nesnesinin dolgu renginin; x koordinatının 10 da 1 i
tonunda kırmızı, y koordinatının 10 da biri tonunda yeşil ve 30 tonunda da mavi
olmasını istedik.
İkinci satırda ise sahpe2 nesnesinin dolgu renginin; y koordinatının 10 da 1 i
tonunda kırmızı, x koordinatının 10 da biri tonunda yeşil ve 30 tonunda da mavi
olmasını istedik.
X ve y ye bağlı değerler 255 i geçtiğinde, yine 255 gibi işlem görülür.
Üçüncü satırda shape1 nesnesinin move özelliği kullanılarak hareket
etmesini sağlıyoruz. Ancak burada dikkat edilmesi gereken konu, frame1 nesnesinin
shape1 nesnesini kapsamasıdır. Dolayısıyla shape1'in hareketi için için verdiğimiz
koordinatlar frame1 için geçerlidir. Örneğin "Shape1.move 0,0" komut satırını
kullansak, shape1 formun sol üst köşesine değil frame1'in sol üst köşesine gider. Bu
satırda x+100 ve y+100 kullandığımız için shape1 daima x ve y değerlerinin 100
fazlasında bulunacaktır. Yani fare işaretçisini programımız çalıştırıldığında formun sol
üst köşesine götürülse; shape1, frame1 ‘in sol üst köşesinden her iki koordinatta 100
kadar ileride olacaktır.
Frame1.BackColor = RGB(X / 10, Y / 10, 255) satırı ile yaptırılan işlem ilk iki
satırdakinin aynıdır. Bu satırda frame1'in zemin rengi x ve y ye bağlı olarak
değişecektir. Ancak burada farklı olan ise, daima en açık mavi tonunun zemin rengi
içinde bulunacağıdır.
If X > 3000 Then
Shape2.BorderWidth = X / 500
End If
Mouse move olayında kullandığımız bu son komut satırında, yine bir şart
sunuyoruz. Eğer farenin x değeri 3000'den fazla olursa shape2 nin çerçeve kalınlığı,
x koordinatının 500 de biri kadar olacaktır. Program ilk çalıştırıldığında çerçeve
kalınklığı 1 olacak, farenin x koordinatı 3000'i geçtiğinde kalınlık bu artışla orantılı
artacak ve azalacaktır. Eğer formunuzun genişliği 3000 den az ise, çerçeve kalınlığı
hiç değişmeyecektir.
18. Herhangi bir nesne image1 nesnesi üzerine sürüklenip bırakıldığında
aşağıdaki komutlar gerçekleşecektir. Ancak uygulamamızda yalnızca command1
nesnesi için "Drag-Drop" özelliğini aktif ettiğimizden dolayı, image1 üzerine
command1 bırakıldığında bu olay gerçekleşecektir. Bu komutları kod penceresinde
image1 nesnesi için "DragDrop" olayına yazacağız.
Private Sub Image1_DragDrop(Source As Control, X As Single, Y As Single)
Image3.Picture = Image1.Picture
Image1.Picture = Image2.Picture
End Sub
İlk durumda image1 nesnesinin resmi şekil 2.8 ‘de ki gibi boş bir çöp
kutusudur. Image2 nesnesinin resmi ise dolu çöp kutusudur. Image3'e başlangıçta
herhangi bir resim ataması yapılmadığı için boştur.
Yapmak istediğimiz command1 nesnesi image1 nesnesine (boş çöp
kutusuna) bırakıldığında, image1 nesnesine dolu çöp kutusu resmi atanmasıdır.
Bunun için ilk satırda daha sonra kullanılmak üzere image1 ‘in resmi(boş çöp
kutusu) image3 ‘e atanır.
İkinci satırda ise image1 nesnesine image2 nesnesinin resmi (dolu çöp
kutusu) atanır.
Böylece sürükle-bırak olayı gerçekleştiğinde image1 nesnesi şekil 2.12 ‘de
görüldüğü gibi dolu çöp kutusu görünümü alır. Program çalıştırıldığında Image2 ve
image3 nesneleri şekil 2.12'de görüldüğü gibi görünmezdirler. ("Visible" özellikleri
"False" dır.)

19. Son olarak image1 nesnesi üzerine çift tıklandığında, tekrar boş çöp
kutusu görünümü kazanmasını sağlayan kodu,image1 nesnesinin "DblClick" olayına
yazacağız.
Private Sub Image1_DblClick()
Image1.Picture = Image3.Picture
End Sub
Bu komut satırı ile yukarıda image3 nesnesine atadığımız dolu çöp kutusu
resmini image1 nesnesine geri atıyoruz.Böylece image1 tekrar şekil 2.8 de ki
görüntüsünü kazanır.
Şekil 2.12
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Data kontrolu

DATA CONTROL NESNESİNİN KULLANIMI

2.1. Visual Basic 5 İle Yazılım Geliştirme

Bütün uygulamalar, çok değişik türlerdeki yapısal bilgilere ihtiyaç duyar. Bu uygulamalar, muhasebe uygulamaları, bilimsel hesaplamalar yapan programlar, müşteri bilgilerine erişen programlar v.b. olabilir. Microsoft Visual Basic içindeki Data Access kullanıcılara uygulamada kullanılan verileri yönetebilmek için kullanılması gereken yapısal veritabanı sistemlerini, uygulamaların içinden yaratmak ve kullanmak için gerekli araçları sağlar.

Bu araçlar şunlardır:

1. Microsoft Jet Database Engine (Jet veritabanı motoru)
2. Data Control (Veri Tabanı kontrol nesnesi)
3. Data Access Object (DAO) –veri erişim nesnesi- programlama arabirimi.

Veri erişim nesneleri kullanarak, veritabanı yaratan veya var olan bir veri tabanlarına değişik biçimlerde erişimi sağlayan programlar yapmak mümkündür. Aşağıdaki veri tabanı biçimlerine veri erişim nesneleriyle erişmek mümkündür;

Microsoft Access
Mtrieve
dBASE
Microsoft FoxPro
Paradox
Open Database Connectivity (ODBC) client/server veritabanları (örneğin Microsoft SQL server veritabanı)

Yapısal veri tabanı sistemlerini yaratabilme ve bunlara erişebilme olanağı kullanıcıya programlama yaparken birçok kolaylık ve avantaj sağlar. Bu avantajlar şunlardır:

• Var olan veritabanı sistemlerine erişen programlar yazmak
• Uygulamanın verilerini diğer programlarla paylaşmasını sağlamak
• Programı basitleştirmek ( Alt düzey kütük işlemleriyle uğraşmak zorunda olmamak)

Visual Basic'de Jet veri tabanı motoruyla iletişim kurmak için iki tane yöntem vardır: Data Control nesnesi ve veri irişim nesneleri. Data Control nesnesi veritabanına programlamaya gerek duymadan sınırlı bir erişim sağlar. DAO modeli ise veri tabanı üzerinde tam bir kontrol sağlamaya yardımcı olan bir programlama arabirimi sağlar. Bu iki yöntem birbirini dışlamaz. Yani bir uygulamada her iki yöntemin de kullanılması gereken durumlar oluşabilir.

DAO modeli ilişkisel veri tabanı sistemlerinin yapısını modelleyen bir nesne kümesinden oluşur. Bu nesneler, veritabanı yaratma, tablo tanımlama, alan ve indeks tanımlama, tablolar arasında ilişki tanımlama ve veritabanını sorgulama vb. gibi işlemleri gerçekleştirmey, sağlayan birçok özellik ve metot sağlar.

Jet veri tabanı motoru, yukarıda belirtilen işlemleri veri tabanı dosyaları üzerinde fiziksel işlemlere dönüştürür ve ayrıca desteklenen veritabanları ile iletişimi sağlar.

Visual Basic ile veritabanı programlama yapılırken veri erişim nesnelerinin yaratılması ön plana çıkar. Bu nesneler Database, TableDef, Fiels ve Index gibi nesneleridir. Bu nesnelerin özellik ve metotları kullanılarak veritabanı üzerinde işlemler yapılır. İşlemlerin sonuçlarını Visual Basic formları üzerinde görmek için de sınırlandırılmış (bound) ve sınırlandırılmamış(unbound) kontrol nesneleri kullanılır.

Bu yaklaşım kod yazmayı basitleştirir ve uygulamayı veritabanının içsel yapısından ve verilerin getirilme mekanizmalarından soyutlar. Böylece uygulamayı geliştiren kişiye büyük bir esneklik sağlanmış olur. Ayrıca veritabanının türü değiştiğinde bile yazılan kodun bunu destelemesi için çok küçük değişiklikler yapmak yeterli olacağından sağlanan esnekliğin boyutunun daha da büyük olduğu görülmektedir. Veri erişim nesneleri kullanarak farklı türden veri tabanlarından tabloların birleştirilmesi mümkündür.

Visual Basic tarafından DAO ve Jet veritabanı motoru kullanılarak erişim yapılabilen üç veritabanı kategorisi vardır:

1. Visual Basic veri tabanları: Bunlar Microsoft Access veritabanı ile aynı biçimi kullanır. Bu veritabanlarına erişim ve üzerinde yapılacak işlemler Jet veritabanı motoru aracılığıyla doğrudan yapılabilir. Jet veritabanı motoru bu veritabanları üzerinde önemli derecede bir esneklik sağlar.

2. Dış veri tabanları (External Databases): ISAM (Indexed Sequential Access Method) biçiminde olan veri tabanları üzerinde Visual Basic ile işlem yapmak mümkündür. Bu veritabanı biçimleri şunlardır: Btrieve, dBASE III, dBASE IV, Microsoft FoxPro 2.0 ve 2.5, Paradox 3.x ve 4.0, Microsoft Excel, Lotus 1-2-3.

3. ODBC veritabanları: Bunlar ODBC standardına uyan client/server yapısındaki veritabanlarıdır. Bu tür veritabanlarına bir örnek olarak Microsoft SQL Server verilebilir. Visual Basic ile client/server uygulamaları yaratmak için veri erişim nesnesinin ODBCDirect modunu kullanmak gerekir. Böylece komutlar doğrudan dış sunucuya (server) iletilir ve orada çalıştırılır. Yani Jet veritabanı motoru devreden çıkarılır.


2.2. Data Control Nesnesi Kullanarak Veritabanına Erişim.

Data Control nesnesi kullanarak, değişik türdeki çoğu veritabanındaki bilgileri görüntülemek, değiştirmek ve bu veritabanlarına yeni bilgiler eklemek mümkündür. Data Control nesnesi kullanılarak üzerinde işlem yapılabilen veri tabanları şunlardır: Microsoft Access, Btrieve, dBASE, Microsoft FoxPro®, ve Paradox. Bunların dışında Microsoft Excel, Lotus 1-2-3, ve standart ASCII metin kütüklerine de Data Control nesnesi kullanılarak erişmek mümkündür. Ayrıca Data Control nesnesi Microsoft SQL server veya Oracle gibi ODBC veritabanlarının verilerine uzak (remote) erişimi de sağlamaktadır.

Data Control nesnesi veri erişimini Jet veritabanı motoru kullanarak gerçekleştirir. Bu veritabanı motoru Microsoft Access ile eşdeğer bir veritabanı yönetimi sağlar. Data Control nesnesi kullanarak fazladan bir kod yazmaya gerek duymaksızın veritabanı erişimi mümkündür. Şimdi Data Control nesnesi kullanımını örneklerle açıklayalım.



Örnek: Data Control nesnesi kullanımı.

Bu örnekte hazır bir veri tabanına Data Control nesnesi kullanılarak nasıl erişim sağlandığı gösterilecektir. Şimdi bu işlemi adımlar halinde gösterelim.

ADIM 1:Visual Basic ile beraber gelen BIBLIO.MDB veritabanındaki Authors tablosunu kullanalım. Authors tablosunun alanları aşağıdaki gibidir.


Sütun
Veri Türü Tanımı
Au_ID Long Integer Asıl Anahtar
Author Text Yazarın Adı
Year Born Integer Yazarın Doğum yıl


ADIM 2 : Standart EXE türünden yeni bir proje yaratın. Formun alt kısmına bir Data Control nesnesi yerleştirin ve aşağıdaki özelliklere belirtilen değerleri verin.

Nesne
Özellik Değer
Form Caption Yazarlar Tablosu
Data Control Align 2-Align Bottom
Name datYazar

Data Control nesnesinin Connect özelliği data control nesnesinin kullanacağı veritabanının türünü belirler. Properties penceresinden bu özellik değiştirilmeye çalışıldığında bir uyumlu veritabanı listesi çıkar, bu listeden bağlanacak veritabanının türü seçilebilir. Bu örnek için Connect değerini Access olarak değiştirin (zaten başlangıç değeri de budur).

Data Control nesnesinin DatabaseName özelliği kullanılacak veritabanının fiziksel dosya ismini belirler. Bu özelliği değiştirmek için yanındaki düğmeye basın. Visual Basic ana dizininden BIBLIO.MDB veritabanı dosyasını seçin.

Data Control nesnesinin RecordSet özelliği kullanılacak veritabanının kayıtları birarada ne şekilde tuttuğunu belirler. Bu değer;

-Table, sadece bir tabloya dayanan kayıt türü
-Dynaset, birden fazla tabloyu kullanan sorgular
-Snapshot, birden fazla tabloyu kullanan sorgular(kayıtlar değiştirilemez)

Bu örnek için RecordSet değerini 0-Table olarak değiştirin.

RecordSource özelliği : kullanılacak tabloyu belirler. Bu özelliği Authors olarak seçin.

BOFAction özelliği : En baştaki tutanağa gelinmişse bundan sonra ne yapılacağını belirler. Alabileceği değerler şunlardır:

MoveFirst : Data Control nesnesinin en başta kalmasını sağlar.

BOF : Data Control nesnesinin en başta kalmasını, geri tuşunun kullanımını iptal etmesini ve Validation adlı olay yordamının çağrılmasını sağlar. (Burada bu özelliğin değerini MoveFirst olarak değiştirin.)

EOFAction özelliği: Eğer en sondaki tutanağa gelinmişse bundan sonra ne yapılacağını belirler. Alabileceği değerler şunlardır.

MoveLast : Data Control nesnesinin en sonda kalmasını sağlar.

EOF : Data Control nesnesinin en sonda kalmasını, ileri tuşunun kullanımını iptal etmesini ve Validation adlı olay yordamının çağrılmasını sağlar.

AddNew : Tabloya yeni bir tutanak ekler. Bu değer kullanılırken dikkatli olunmalıdır.Çünkü farkında olmadan bir çok boş tutanak eklemeye neden olabilir.(Burada bu özelliği MoveLast olarak değiştirin.)

ReadOnly özelliği : True olduğunda tabloda değişiklik yapılması engellenmiş olur. Eğer RecordType özelliği Snapshot seçilmişse bu özellik değiştirilemez.


ADIM 3 : Data Control nesnesi tarafından yaratılan kayıt kümesi herhangi bir kod yazmaya gerek duyulmadan dolaşılabilir. Bu işlem Data Control nesnesinin üzerindeki düğmelerle gerçekleştirilir.

Program çalıştırıldığında belirtilen tutanak kümesi (RecordSet) üzerinde dolaşılabilir, fakat sonuçları herhangi bir şekilde form üzerinde gösterilmediğinden bu kullanıcı tarafından fark edilmez.

ADIM 4 : Herhangi bir anda aktif olan tutanağı form üzerinde göstermek için formun üzerine verileri göstermek için kullanılacak olan nesnelerin konması gerekir. Form üzerinde veritabanı ile ilişkilendirilebilecek standart Visual Basic nesneleri şunlardır.

• TextBox
• ListBok
• CheckBox
• ImageControl
• Label
• PictureBox

Formun üzerine aşağıdaki gibi üç tane TextBox ve üç tane de Label yerleştirin.



Bu formdaki elemanların özelliklerini de aşağıdaki tabloya göre düzenleyin.

Nesne
Özellik Değer
TextBox DataSource datYazar
DataField Au_ID
Name txtYNo
TextBox DataSource datYazar
DataField Author
Name txtYAd
TextBox DataSource datYazar
DataField Year Born
Name txtDYil
Label Caption Yazar No
Name lblYNo
Label Caption Yazar ADI
Name lblYAd
Label Caption Dogum YILI
Name lblDyil

ADIM 5: Programı çalıştırın. Ekranda Yukarıdaki form görüntüsü çıkacaktır. Formda Görüleceği gibi tablonun ilk tutanağı ekrana gelmiştir. Şimdi Data Control nesnesi üzerindeki düğmelerle veritabanı tablosu üzerinde dolaşmak mümkündür.


2.3. Data Control Nesnesinin Olaylarını ve Metotlarını Kullanma

Data Control nesnesinin de tüm nesneler gibi olay yordamları, metotları ve özellikleri vardır. Bunlar veri tabanı üzerinde işlem yapan uygulama yazılımları geliştirmeyi kolaylaştırır. Data kontrol nesnesinin olay yordamlarının ve metotlarının kullanımı için aşağıdaki örneği gerçekleştirelim.

Örnek: Data Control Nesnesi kullanarak veritabanı üzerinde ekleme, silme, arama ve değiştirme işlemlerinin yapılması.

Bu örnekte önce VB Aplication Wizard (uygulama sihirbazı) kullanarak bir şablon uygulama yaratalım. Bunun için yine BIBLIO.MDB veritabanının bu sefer Publishers tablosunu kullanalım. İşlemler aşağıda adımlar halinde sıralanmıştır.

1. Add-Ins menüsünden Application Wizard seçeneğini seçerek sihirbazı çalıştırın.
2. SDI seçeneğini seçin.
3. Clear All düğmesine basarak menüleri kaldırın.
4. Resource File kullanılmadığını belirtin.
5. Internet erişimi istenmediğini belirtin.
6. Standart formların hiçbirini istemediğinizi belirtin.
7. Bu aşamada Yes, create forms from my database seçeneğini seçip veritabanı türünü ve kullanacağınız veritabanı türünü belirleyin. Bu örnekte, veritabanı biçimi, Access ve veritabanı dosyası ise Visual Basic dizinindeki BIBLIO.MDB olarak belirlenmelidir.
8. Listelenen tablolardan Publishers tablosunu seçin.
9. Projenin ismini de YAYINEVI olarak değiştirin.
10. Şimdi yeni yaratılmış olan projeden frmPublishers formu dışındaki formları silin.
11. FrmPublishers formundan Grid butonunu ve bu düğmeye ait cmdGrid_Click kodunu silin.
12. Project menüsünden Properties seçeneğini seçip başlangıç formu olarak frmPublishers formunu seçin. Üretilen kodu inceleyelim.

Ekleme:

Private Sub cmdAdd_Click()
Data1.Recordset.AddNew
End Sub

AddNew metodu veritabanına tüm alanları boş bir tutanak ekler. Veri eklemek için kontrolün en baştaki metin kutusuna geçmesini sağlamak için aşağıdaki satır bu yordamın sonuna eklenmelidir.

txtFields(0).SetFocus

Silme:

Private Sub cmdDelete_Click()
With Data1.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
End Sub

Delete metodu tutanağı tablodan siler. Eğer silinen tutanak tek tutanak ise bir hata oluşur. Bu hata oluştuğunda Data1 nesnesinin Data1_Error olayı çağrılır. Bu olay aşağıdadır.

Private Sub Data1_Error(DataErr As Integer, Response As Integer)
MsgBox "Data error event hit err:" & Error$(DataErr)
Response = 0
End Sub

Veri erişimi sırasında bir hata oluştuğunda bu olay çağrılır.

Refresh:

Private Sub cmdRefresh_Click()
'sadece çok kullanıcılı uygulamalarda gereklidir
Data1.Refresh
End Sub

Bu metod da aktif olan tutanağın yeniden oluşturulmasını sağlar.

Değiştirme:

Private Sub cmdUpdate_Click()
Data1.UpdateRecord
Data1.Recordset.Bookmark = Data1.Recordset.LastModified
End Sub

UpdateRecord metodu aktif olan tutanağın bilgilerini kaydeder. Yukarıda görülen koddaki ikinci satır aktif tutanağın değişen tutanak olmasını sağlar. Bu satır yazılmazsa aktif tutanak tablonun ilk tutanağı olur.

Bulma:

Bulma işleminin yukarıdaki gibi hazır bir metodu yoktur. Bu yüzden bu kodu kendimiz yazmalıyız. Önce formu aşağı doğru bir miktar uzatın ve forma aşağıdaki nesneleri ekleyin.

TextBox Name txtFind
CommanButton Caption &Find
Name cmdFind

Bu nesnelerden txtFind, aranacak olan yayınevinin ismini girmek için kullanılacak ve cmdFind butonu da arama işlemini gerçekleştirmek için kullanılacaktır. Arama işlemini gerçekleştirmek için aşağıdaki kodu cmdFind_Click olayına girin.

Private Sub cmdFind_Click()
Data1.Recordset.FindFirst "Name = '" & txtFind & "'"
End Sub

Burada Data1 nesnesinin metotlarından olan FindFirst arama için kullanılmıştır. Bu kod bize tablodaki ilk tutanağı bulur. Aynı şekilde son tutanağı bulmak için FindLast, birsonraki tutanağı bulmak için FindNext, bir önceki tutanağı bulmak için FindPrevious metotlarını kullanmak mümkündür.

Yukarıdaki kodda FindFirst metoduna parametre olarak verilen kısmı arama kriterini belirler. Eğer arama kriteri adının içinde "Microsoft" geçen yayınevini bul gibi olursa bu aşağıdaki gibi belirtilmelidir.

Data1.Recordset.FindFirst "Name LIKE '*" & txtFind & "*'

Aranan nitelikte bir tutanak bulunmadığı takdirde Data1.Recordset.NoMatch adlı özellik True değerini alır.

Data Control Nesnesinin diğer olayları:

Private Sub Data1_Reposition()
Screen.MousePointer = vbDefault
On Error Resume Next
Data1.Caption = "Record: " & CInt( (Data1.Recordset.RecordCount * _ (Data1.Recordset.PercentPosition * 0.01)) + 1)
End Sub

Bu olay aktif olan tutanak değiştiğinde çağrılır. Bu yordamdaki son satır Data1 nesnesinin başlığını o andaki tutanağın numarasını gösterecek şekilde değiştirir.

Private Sub Data1_Validate(Action As Integer, Save As Integer)
Select Case Action
Case vbDataActionMoveFirst
Case vbDataActionMovePrevious
Case vbDataActionMoveNext
Case vbDataActionMoveLast
Case vbDataActionAddNew
Case vbDataActionUpdate
Case vbDataActionDelete
Case vbDataActionFind
Case vbDataActionBookmark
Case vbDataActionClose
Screen.MousePointer = vbDefault
End Select
Screen.MousePointer = vbHourglass
End Sub

Bu olay kodun içindeki Select deyiminde belirtilen veritabanı işlemlerinden sonra çağrılır. Parametre olarak verilen Action değeri hangi işlemden sonra çağrıldığını belirtir. Save parametresi de verinin değişip değişmediğini belirtir.

Programın çalışır haldeki son durumu aşağıdaki gibidir.

2.4. Activex Data Bound Kontrol Nesnelerini Kullanma
Visual Basic içinde veritabanı ile bağlanabilen birçok kontrol nesnesi bulunmaktadır. Bunların yanısıra birçok ActiveX kontrol nesnesi de mevcuttur. Veritabanı ile ilişkilendirilebilen içsel kontroller daha önce de sözkonusu edilen;

• Check box
• Image
• Label
• Picture box
• Text box
• List box
• Combo box

kontrolleridir.



ActiveX kontrol nesneleri ise

• Data-bound list box
• Data-bound combo box
• MSFlexGrid
• Apex Data-Bound Grid (DBGrid)
• MaskedEdit

kontrol nesneleridir.

Karmaşık kullanıcı arabirimlerinde, bu ActiveX kontrol nesneleri veritabanı kullanımını daha da fonksiyonelleştirir. Böylece kullanıcının, karmaşık bir veritabanı ile çalışırken daha kolay ve hatasız işlem yapması sağlanır. Sağlanan kolaylıklar, tutanak kümelerinin tümüne liste halinde erişim, verilerin gruplanması gibi veritabanının işlevselliğini arttırıcı işlemlerdir.

ActiveX kontrollerini kullanmadan önce form üzerine Data Control nesnesinin yerleştirilmiş ve Project menüsünün References seçeneği kullanılarak ihtiyaç duyulan ActiveX kontrollerinin seçilmesi ve ayrıca Data Access Object (DAO) kütüphanesinin de seçili olmasını sağlamak gerekir.

Bu genel açıklamalardan sonra, ActiveX kontrol nesnelerinin kullanımına örnekler verelim.

Data Bound ListBox ve Data Bound ComboBox kullanımı basittir. Daha önce kullanılan TextBox kullanımı ile benzerdir. ListBox ve ComboBox nesneleri ilişkilendirildikleri tablo alanı ile otomatik olarak doldurulur.

Örnek: Bir Data Bound ComboBox nesnesinin sorgu sonuçlarıyla doldurulması.
Yeni bir proje yaratın, forma aşağıdaki nesneleri ekleyin.

Form
Caption YAYINEVLERI
Name frmYEvi
DataControl Name datYEvi
Connect Access
Databasename BIBLIO.MDB
RecordsetType 2-Snopshot
Recordsource Select Name from Publishers
Visible False
DBCombo Name dbcYEvi
Style 2-Dropdown List
RowSource datYEvi
ListField Name



Yukarıda görüleceği gibi DataControl nesnesinin RecordSource özelliğine Select Name from Publishers ifadesi yazılmıştır. Bu ifade bir SQL sorgusudur. Bu ifadeyle Publisher Tablosundan Yayınevi adları alanı seçilir ve bir liste oluşturulur.

DBCombo kontrol nesnesinin RowSource özelliği ilişkilendirileceği Data Control nesnesini belirler. ListField özelliği ise listelenecek olan alanı belirler.

Program çalıştırıldığında aşağıdaki ekran görüntüsü belirecektir.



DBCombo nesnesinin üç farklı biçimi vardır. Bunlar;

Dropdown combo Metin kutusu ve listeden oluşur. Metin kutusuna listede olmayan elemanlar girilebilir. Yandaki ok düğmesine basıldığında aşağı doğru bir liste açılır.

Simple combo Listesi aşağı doğru açılan türden değildir. Listede olmayan elemanlar girilebilir.

Dropdown list Aşağı doğru açılan bir listesi vardır. Listede olmayan elemanlar metin kutusuna girilemez.

Örnek : İki Data Control nesnesinin aynı anda kullanımı ve DBCombo kontrol nesnesinin önemi.

DBCombo nesnesinin önemi birden fazla tablo ile işlem yapmak gerektiğinde daha da açık bir şekilde kendisini gösterecektir. Bir veritabanında iki ayrı tablo olduğunu düşünelim. Bunlardan 1. Tablodaki bir alan 2. Tablodaki bir alanı referans olarak gösteriyorsa, 1. Tabloya veri girileceği zaman referans gösteren alana girilecek veri 2. Tabloda olmak zorundadır. Bu bilginin var olup olmadığının kontrol edilmesi veya var olan bir bilginin girilmesi için bir listeye ihtiyaç duyulur.

Bu durumu örneklemek için daha önce de kullandığımız BIBLIO.MDB veritabanındaki iki tabloyu göz önüne alalım. Bu tablolar, Titles (kitaplar) ve Publishers (Yayıncılar) tablolarıdır. Kitap bilgilerinin tutulduğu Titles tablosunda yayıncılar tablosu olan Publishers tablosuna referans gösteren PubId (Yayıncı numarası) adlı bir alan mevcuttur. Bu alana girilecek olan değer var olmayan bir yayıncının numarası olamayacağından önce varlığı kontrol edilmelidir.

Bu durumu daha açık hale getirmek için yeni bir proje başlatın ve aşağıdaki nesneleri projeye ekleyin. Formun genel görünümü ileride verilmiştir. Nesnelerin yerleşim planı için ilerideki form görünümünü kullanın.

Form
Caption Kitap Adları
Name frmKitaplar
DataControl Name datYEvi
Connect Access
Databasename BIBLIO.MDB
RecordsetType 2-Snopshot
Recordsource Select PubID,Name
From Publishers Visible False
CommandButton Name cmdKapat
Caption &Kapat
CommandButton Name cmdDegistir
Caption &Değiştir
CommandButton Name cmdYenile
Caption &Yenile
CommandButton Name cmdSil
Caption &Sil
CommandButton Name cmdEkle
Caption &Ekle
DataControl Name datKitap
Align 2- AlignBottom
Connect Access
Databasename BIBLIO.MDB
Readonly False
RecordsetType 1-Dynaset
RecordSource Titles
DBCombo Name dbcYEvi
DataField PubID
DataSource datKitap
ListField Name
BoundColumn PubID
Text Yayinevleri
RowSource datYEvi
Style 2- Dropdown list
TextBox Name txtKAd
DataField Title
DataSource datKitap
TextBox Name txtYil
DataField Year Published
DataSource datKitap
TextBox Name txtISBN
DataField ISBN
DataSource datKitap
TextBox
Name txtTanim
DataField Description
DataSource datKitap
TextBox Name txtNotlar
DataField Notes
DataSource datKitap
TextBox Name txtKonu
DataField Subject
DataSource datKitap
TextBox Name txtYorumlar
DataField Comments
DataSource datKitap
Multiline 1-True
ScrollBar 2-Vertical

Bunlardan başka 8 tane de Label yerleştirin ve başlıklarını ileride verilecek olan form görüntüsünden yararlanarak değiştirin.

Şimdi aşağıdaki kodu frmKitaplar formuna ekleyin.

Private Sub cmdDegistir_Click()
datKitap.UpdateRecord
datKitap.Recordset.Bookmark = datKitap.Recordset.LastModified
End Sub

Private Sub cmdEkle_Click()
datKitap.Recordset.AddNew
End Sub

Private Sub cmdKapat_Click()
Unload Me
End Sub

Private Sub cmdSil_Click()
datKitap.Recordset.Delete
datKitap.Recordset.MoveNext
End Sub

Private Sub cmdYenile_Click()
datKitap.Refresh
End Sub

Private Sub datKitap_Error(DataErr As Integer, Response As Integer)
MsgBox "Hata: " & Error$(DataErr)
Response = 0
End Sub

Private Sub datKitap_Reposition()
Screen.MousePointer = vbDefault
On Error Resume Next
datKitap.Caption = (datKitap.Recordset.AbsolutePosition + 1) _
& ". TUTANAK"
End Sub

Programı çalıştırın. Aşağıdaki ekran görüntüsü çıkacaktır.

Şimdi, DBCombo kontrol nesnesinin özelliklerini tekrar inceleyelim

DBCombo
Name dbcYEvi
DataField PubID
DataSource datKitap
ListField Name
BoundColumn PubID
Text Yayinevleri
RowSource datYEvi
Style 2- Dropdown list

DataSource özelliği Varlığı kontrol edilecek verilerin alınacağı DataControl nesnesini belirler. Burada Kitaplar tablosu.

RowSource özelliği Listeye konacak olan verilerin alınacağı DataControl nesnesini belirler. Burada Yayıcılar tablosundan seçilen kısım.

ListField özelliği Listelenecek alanı belirler. Burada Yaınevinin adı.

BoundColumn özelliği Referans gösterilen tablo alanını belirler. Burada Yayıncılar tablosundan Yayıncı numarası.

DataField özelliği Karşılaştırılacak olan alanı belirler. Burada Kitaplar tablosundan Yayıncı numarası.

Tablolardan görüleceği gibi, Kitaplar tablosunda Yayıncı adı alanı bulunmamaktadır. Yayıncı adına erişmek için buradaki, Yayıncı numarası (PubID) alanından faydalanılmaktadır. Bu numaranın Yayıncılar tablosunda gösterdiği yayıncının adı alınıp listeye konmaktadır. Yeni bir kayıt eklenirken Yayıncı adını listeden seçmek, eklenecek olan kayda yayıncı numarası vermekle eşdeğerdir. Yayıncı numarası otomatik olarak kayda eklenecektir.

Örnek : Data Bound Grid kontrol nesnesinin kullanımı.

Data Bound Grid kontrol nesnesi, verilerin çizelgeler halinde gösterilebilmesini ve değiştirilebilmesini sağlar. Data Control nesnesi ile doğrudan bağlanabilir. Bu özellik tablo içeriğinin doğrudan çizelgeye aktarılmasını sağlar. Kullanımı en basit Data Bound Control nesnelerinden biridir. Çalışır duruma gelmesi için sadece yapılması gereken DataSource özelliğinin değiştirilmesi yeterlidir.

ADIM 1 : Yeni bir proje yaratın. Aşağıdaki nesneleri formun üzerine ekleyin.

Form
Caption Data Bound Grid
Name frmGrid
DataControl Connect Access
Databasename BIBLIO.MDB
Name datKitap
RecordSetType 1-Dynaset
RecordSource Titles
Visible False
Data Bound Grid DataSource datKitap
Name dbgKitap



ADIM 2 : Bir önceki örnekte kullanılan CommandButton nesnelerinin aynısını tekrar formun üzerine yerleştirin ve bunlara ait kodları da bir önceki örnekteki gibi yazın. Bu kodun yanısıra aşağıdaki kodu da forma ekleyin.

Private Sub datKitap_Error(DataErr As Integer, Response As Integer)
MsgBox "Hata: " & Error$(DataErr)
Response = 0
End Sub

Private Sub dbgKitap_HeadClick(ByVal ColIndex As Integer)
datKitap.RecordSource = "Select * From Titles Order By [" & _
dbgKitap.Columns(ColIndex).DataField & "]"
datKitap.Refresh
End Sub

Burada ilk yordam herhangi bir hata oluştuğunda hatanın pas geçilmesini, ikinci yordam ise çizelgedeki sütunlardan birine basıldığında çizelge içeriğinin o sütuna göre sıralı olmasını sağlar. Bunun için bir SQL sorgusu kullanılmaktadır. Sıralamayı sağlayan kısım SQL sorgusundaki Order By ile başlayan kısımdır.

Programın çalışması aşağıdaki gibi olacaktır.


Buradaki çizelge Kitap ismine göre sıralıdır. Bu Kitap adı(Title) yazan yere mouse ile basılarak sağlanmıştır.

Örnek : MSFlexGrid Control nesnesinin kullanımı.

Bu kontrol nesnesi Data Bound Grid nesnesinin sağladığı özelliklerin hepsini sağlar. Farklı bir özelliği, üzerinde değişiklik yapılamamasıdır. Bu nesne verilerin gösterilmesinde, gruplanmasında ve yönetiminde çok büyük avantajlar sağlar. Bu örnekte MsFlexGrid nesnesinin bazı özelliklerinin ve metotlarının kullanımı konu edilecektir.

Yeni bir proje çalıştırın. Aşağıdaki nesneleri bu projedeki formun üstüne yerleştirin. Nesneleri yerleştirirken ileride verilecek olan form görüntüsünü referans olarak kullanabilirsiniz.

Form
Caption Flex Grid
Name frmFlexGrid
DataControl Connect Access
Databasename BIBLIO.MDB
Name datYazar
RecordSource Authors
Visible False
MsFlexGrid Name MsFlexGrid1
DataSource datAuthors
AllowBigSelection False
GridLines 0-flexGridNone
GridLinesFixed 0-flexGridNone
AllowUserResizing 1-flexResultsColumns

Bunlardan başka 5 tane de CommandButton yerleştirin ve Caption özelliklerini sırasıyla; Grid Lines, Grid Lines Fixed, ForeColor, Font ve BackColor olarak değiştirin. Aşağıdaki kodu frmFlexGrid formuna ekleyin.

Private Sub Command1_Click()
If MSFlexGrid1.GridLines < flexGridRaised Then
MSFlexGrid1.GridLines = MSFlexGrid1.GridLines + 1
Else
MSFlexGrid1.GridLines = flexGridFlat
End If
End Sub

Private Sub Command2_Click()
If MSFlexGrid1.GridLinesFixed < flexGridRaised Then
MSFlexGrid1.GridLinesFixed = MSFlexGrid1.GridLinesFixed + 1
Else
MSFlexGrid1.GridLinesFixed = flexGridFlat
End If
End Sub

Private Sub Command3_Click()
Static iClicks As Integer
Select Case iClicks
Case 0: MSFlexGrid1.CellForeColor = &HFF&
Case 1: MSFlexGrid1.CellForeColor = &HFF00&
Case 2: MSFlexGrid1.CellForeColor = &HFF0000
Case 3: MSFlexGrid1.CellForeColor = 1: iClicks = -1
End Select
iClicks = iClicks + 1
End Sub

Private Sub Command4_Click()
Static iClicks As Integer
Select Case iClicks
Case 0: MSFlexGrid1.CellFontBold = 1
Case 1: MSFlexGrid1.CellFontItalic = 1
Case 2: MSFlexGrid1.CellFontBold = 0
Case 3: MSFlexGrid1.CellFontItalic = 0: iClicks = -1
End Select
iClicks = iClicks + 1
End Sub

Private Sub Command5_Click()
Static iClicks As Integer
Select Case iClicks
Case 0: MSFlexGrid1.CellBackColor = &HFF&
Case 1: MSFlexGrid1.CellBackColor = &HFF00&
Case 2: MSFlexGrid1.CellBackColor = &HFF0000
Case 3: MSFlexGrid1.CellBackColor = &HFFFFFF: iClicks = -1
End Select
iClicks = iClicks + 1
End Sub


Burada ilk iki yordam çizgi biçimini basıldıkça döngü halinde değiştirir. Diğer yordamlar da sırasıyla aktif olan hücrenin yazı rengini, font biçimini ve geri plan rengini yine döngü halinde değiştirir.

Programın çalışma sırasındaki görünüş örneği aşağıdadır.



Örnek: Şimdi yukarıdaki örnek üzerinde biraz değişiklik yapıp MSFlexGrid kontrol nesnesinin bir özelliğini daha görelim.

ADIM 1 : Yukarıdaki formu sağa doğru biraz genişletip ileride gösterilen biçime getirin. Bu forma bir CheckBox yerleştirin ve Caption özelliğini Merge Cells olarak değiştirin. Bu hücreleri birleştirmek için kullanılacak olan işaret kutusudur.

ADIM 2 : datYazar Data Control nesnesinin aşağıdaki özelliklerini değiştirin.

Name
datTKitap
RecordSource All Titles

ADIM 3 : Aşağıdaki kodu frmFlexGrid formunun sonuna ekleyin.

Private Sub Init()
Dim i As Integer
MSFlexGrid1.Row = 0
For i = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Col = i
MSFlexGrid1.CellFontSize = 8
MSFlexGrid1.CellAlignment = 1
MSFlexGrid1.MergeCol(i) = True
Next i
MSFlexGrid1.MergeCells = 0
End Sub

Private Sub Check1_Click()
MSFlexGrid1.MergeCells = Check1
End Sub


Burada init diye adlandırılan yordam MSFlexGrid nesnesinin sütunlarının birleşmeye uygun hale getirilmesini ve görünümünün düzgün olmasını sağlar. Bu yordam Form_Load olay yordamında çağrılmalıdır.

Programın bu yeni haliyle çalışması aşağıdaki gibidir. Görüleceği gibi aynı olan değerler birleştirilmiş ve tek bir hücre haline getirilmiştir.

Bu özelliklerinden başka MSFlexGrid yapısında hücrelere resim yerleştirmek de mümkündür.

MSFlexGrid yapısı DataControl nesnesi kullanılmadan da kullanılabilir. Bu durumda hücreleri doldurmak için AddItem metodu kullanılır.



THE CONTROL DATA CORPORATİON

1957 founded by ex-ERA employees in Minneapolis, Minnesota
1958 Seymour Cray joins CDC
1959 CDC 1604 first shipment. This a 48-bit machine close to the von Neumann proposal, with added index registers. Related to the ERA 1103A.
1959 CDC 160 first shipment. This is a 12-bit computer, the first minicomputer. Strong influence on DEC PDP early models as well as all further minicomuters. Used either stand-alone or as frontend to the 1604.
1962 CDC 3000 family, not done by Seymour Cray (who is working on the 6600 together with Thornton and a design crew totaling 34, at Chippewa Falls). Upward compatible to 1604, with added functionality, speed, and system variants.
1964 CDC 6600 first shipment. Speed is 50 times the 1604, depending upon application somewhere around 1 MFLOPS, 60 bit words. Marks the starting point of Seymour Cray machines dominance in high performance scientific computation. Introduces larger working store (set of registers), peripheral processors (closely related to the 160) for I/O, very high bandwidth central memory (32 banks at 1000 nsec cycle supporting a CPU at 100 nsec cycle). RISC-type instruction set with 15-bit and 30-bit formats. A single instruction (exchange jump) saves and restores the full working store.
1965 CDC 6000 family. Comaptible slower and cheaper processors, dual processors, extended core storage (2MW)
1969 CDC 7600 first shipment, 4-5 times the speed of the 6600, largely compatible. The Cyber 960-31 operated by cray-cyber.org is of about 1/2 the performance of this machine, and software compatible to the 6600.
1972 Seymour Cray leaves CDC to found Cray Research, Inc.
1974 Cyber 70 family
1976 CDC Star-100 vector computer, first delivered to Lawrence Livermore Lab. Thornton is lead designer.
1978 Cyber 170 family
1980 Cyber 200 family, improved versions of the STAR-100
1982 Cyber 180 family, 64-bit virtual memory family, with 60-bit real memory (6000, 70, 170) compatibility mode
1987 ETA-10, successor to Cyber 200 family. Neil Lincoln chief designer.
on ETA systems
on the ETA-10
on the ETA closing
Cyber 17/18/1700 minicomuters
Advanced Flexible Processor, CyberPlus VLIW machines
peripherals
4xxx series
A table of CDC mainframe machines may be found here
More on CDC and ETA on CDC/ETA and others
on CDC including CyberPlus

In ASP.NET 2.0, the GridView and DetailsView controls are designed to work together. They don't merely provide complementary services, they also share a number of helper classes and components. The output of the GridView control consists of a sequence of rows, each with a fixed number of columns. Each table column maps to a data column in the bound data source. The DetailsView control has a fixed number of rows (one for each column in the bound data source) and a constant number of columns (header and value).
GridView and DetailsView can be used together to form master/details pages, as I demonstrated in my last column (see Cutting Edge: Flexible Custom Data Views). Both represent data columns in the bound data source. In fact, a GridView's column and a DetailsView's row are the same kind of object and are represented in ASP.NET 2.0 by the same class-DataControlField.
DataControlField is an abstract class and cannot be used for actual data binding. A bunch of child field classes are derived for binding data to GridView and DetailsView controls. In my last column I covered some of these field types. In particular, I showed how to use the TemplateField class to add validation and special editing user interface capabilities to bound fields. The TemplateField class works as a generic container of markup. It is ideal for rendering custom types of data and any combination of existing fields that you might need. The TemplateField type can also be used to render foreign-key columns through dropdown lists or dates through calendars.
But what if you wanted a specialized, more compact calendar field class-a CalendarField type that would render the bound data as a string in view mode and employ a more effective Calendar control in edit and insert mode? As I mentioned, you can achieve the same result using a TemplateField, but that would be like using late-bound versus early-bound objects. A data-bound page based on CalendarField will be easier to read and even a bit faster to process at run time.
I'll discuss the design and implementation of custom data field types and demonstrate how to actually code them using a few examples-CalendarField to render date values and DropDownField to render foreign key values defined on an external data source.

The Data Control Field Class

The DataControlField class in ASP.NET 2.0 is a parallel for the DataGridColumn type used extensively with DataGrid controls in ASP.NET 1.x and is used only by the GridView and DetailsView controls. However, if you happen to write a custom data-bound control that requires binding to columns of data, you can use the DataControlField type to bind data columns to your control's user interface.
As I mentioned, DataControlField is an abstract class that inherits directly from System.Object. It implements the IStateManager interface. Figure 1 lists the methods and properties on the class.
As you can see, the class supports a few style properties-ItemStyle, HeaderStyle, FooterStyle, and ControlStyle. In ASP.NET, style properties are not persisted in the view state through the usual ViewState container, as most simple type properties are. The Style class from which all style properties derive implements IStateManager to take care of view state persistence. To utilize this specific capability, classes that expose style properties typically implement IStateManager themselves to delegate view state persistence to the methods defined on the objects that represent style properties. I'll return to this later.
Types derived from DataControlField are listed in Figure 2. Although the DataControlField class is marked abstract, it contains a lot of code and many concrete members. The only abstract method is CreateField, defined as follows:
Protected MustOverride Function CreateField() As DataControlField
This method is expected to return an instance of the particular data control field object. Other methods should also be overridden in derived classes because their built-in implementation is empty (though not abstract). Those methods are ExtractValuesFromCell and InitializeCell. You must override them to create a significant new field type. Depending on what kind of new functionality you want to build into the field, overriding additional members might be required as well.
Back to Contents

Designing the CalendarField Component

The CalendarField component inherits from DataControlField and adds three new properties-DataField, ReadOnly, and DataFormatString. DataField is a string property and indicates the name of the data source column that will be bound to the field. ReadOnly is a Boolean property to indicate whether the contents of the field are editable. To control whether the field is to be added in the insert mode UI, you can use the base InsertVisible Boolean property. Finally, DataFormatString indicates the desired format of the date. The contents of the DataFormatString property will be passed to the ToString method of the DateTime class, meaning that {0:d} and similar expressions are invalid. Here's an example of the CalendarField persistence format:
HeaderText="Date" ShowHeader="true"
DataFormatString="dd MMM, yyyy" ReadOnly="False" />
The code that follows shows the implementation of the DataField property (keep in mind that the other custom properties follow the same implementation scheme):
Public Overridable Property DataField As String
Get
Dim o As Object = MyBase.ViewState("DataField")
If (Not o Is Nothing) Then Return CType(o, String)
Return String.Empty
End Get
Set(ByVal value As String)
MyBase.ViewState("DataField") = value
OnFieldChanged()
End Set
End Property
The OnFieldChanged method is a protected virtual method defined on the parent class DataControlField and meant to signal to the host control (the GridView) that the value of a property on the field has changed. Each control field component knows about its host control through the Control property defined on DataControlField. The Control property is protected and set when the host control initializes the field component.
The Initialize method (see Figure 1) is called by the host control (GridView or DetailsView) to initialize the field. The initialization takes place before the field is added to the Fields collection of GridView and DetailsView. GridView and DetailsView call the Initialize method from within their CreateChildControls method. The Initialize method is given its basic behavior in the DataControlField base class and there's no real need for you to override it in a derived class:
Public Overridable Function Initialize( _
sortingEnabled As Boolean, ctl As Control) As Boolean
Initialize receives a Boolean value that indicates if sorting is supported. It also receives a reference to the host control (GridView or DetailsView) to be stored in the internal Control property. The return value tells the host control if a call to DataBind is required to complete the initialization of the field type.
Another method on DataControlField that you might want to override in some cases is ValidateSupportsCallback. The default implementation of the method in DataControlField simply throws an exception that the field type doesn't intend to support script callbacks. In a derived class you can override this method to prevent the exception from being thrown in some or all cases. For example, you can supply an empty method implementation to say that a field supports callbacks or throws an exception based on the value of a field-specific property:
Public Overrides Sub ValidateSupportsCallback()
If Not SupportsCallback Then
Throw New NotSupportedException("Callbacks Not Supported")
End If
End Sub
InitializeCell and ExtractValuesFromCell will need overrides in any significant control. InitializeCell lets you take control of the contents of cell where the field value is displayed. ExtractValuesFromCell extracts values from the cell to pursue updates or insert operations. Before taking the plunge into these methods and their overrides for the CalendarField component, let's have a look at Figure 3 where other protected overridable methods are listed.
Back to Contents

Implementing CalendarField

The CalendarField class provides the three aforementioned properties-DataField, ReadOnly, and DataFormatString-and overrides InitializeCell, ExtractValuesFromCell, CopyProperties, and CreateField.
CreateField follows a common scheme and gets the same form of implementation in all built-in field types:
Protected Overrides Function CreateField() As DataControlField
Return New CalendarField()
End Function
Overriding this method is mandatory if you derive from DataControlField; it is optional, but recommended, if you derive from existing field types.
In InitializeCell you begin by calling the base method to import much of the logic that deals with header and footer rendering. Next, you add some code to customize the current cell, as shown here:
Sub InitializeCell(cell As DataControlFieldCell, _
cellType As DataControlCellType, _
rowState As DataControlRowState, rowIndex As Integer)

' Call the base method
MyBase.InitializeCell(cell, cellType, rowState, rowIndex)

' Initialize the contents of the cell
If cellType = DataControlCellType.DataCell Then
InitializeDataCell(cell, rowState)
End If
End Sub
The InitializeCell method receives four arguments: a reference to the cell object, the type of the cell, and the state and index of the row being rendered. Most of the existing field components delegate their rendering tasks to another internal method that is usually named InitializeDataCell. Figure 4 shows the implementation of InitializeDataCell for CalendarField.
At its core, the InitializeDataCell method determines which control to bind to data-the cell for view mode or a Calendar control for edit or insert modes. The control is then attached to a DataBinding event handler to actually retrieve and display data. In the handler, you determine the working mode, retrieve the value to display, and configure the control as appropriate.
In view mode, the LookupValueForView helper method determines the value to display. It takes a reference to the naming container of the control (table cell or calendar) that currently forms the field's UI. The naming container is passed to the DataBinder.GetDataItem method to obtain a reference to the row object:
Dim dataItem As Object = DataBinder.GetDataItem(container)
Dim dt As DateTime = _
CType(DataBinder.GetPropertyValue(dataItem, DataField), DateTime)
Next, DataBinder.GetPropertyValue extracts the requested field from the row object. For a CalendarField control, this value is a DateTime object and can be further formatted before display. In edit or insert mode, no significantly different behavior is required, except that you might want to distinguish between edit and insert and provide a default value in the latter case:
Protected Overridable Function LookupValueForEdit( _
container As Control) As DateTime
If Not _inInsertMode Then
Dim dataItem As Object = DataBinder.GetDataItem(container)
Dim value As Object = DataBinder.GetPropertyValue( _
dataItem, DataField)
Return CType(value, DateTime)
End If
Return DateTime.Now
End Function
GridView and DetailsView controls scan their own list of bound fields to collect input values when an update or insert command is selected. In doing so, they call the ExtractValuesFromCell method on the field types. Figure 5 details the implementation of ExtractValuesFromCell in the CalendarField component.
The ExtractValuesFromCell method is invoked when the field is in edit or insert mode. You locate the input control and capture any significant values it may contain. Based on the code shown in Figure 4, the CalendarField's input control is the first control in the Controls collection of the cell. (Note that the position of the input control is arbitrary and depends on the structure of the cell you create in InitializeCell.)
Once you hold the currently selected value of the input control, you add it to the dictionary object that was passed to the ExtractValuesFromCell method. The dictionary contains name/value pairs where the name entry is the name of the DataField property.
Back to Contents

Using the CalendarField Component

A custom data control field must be registered with the page (or the application) as any other custom server control. To do this, use the @ Register directive like so:

Add the following code to the element of a DetailsView or GridView:

Turn the page in design mode and work through the Visual Studio® 2005 menus and windows to get what's shown in Figure 6.
The sample DetailsView has two custom data fields: CalendarField, used for the Date row, and a DropDownField, used for the posted-by row. I'll say more about the DropDownField control shortly. As you can see, the two control fields have a slightly different user interface. This is due to the DataBinding event handler. Basically, you check the DesignMode property and output some markup if the output is going to be shown in Visual Studio 2005:
If DesignMode Then
Return "Databound Date"
End If

Figure 6 DetailsView
DesignMode is a protected property of the DataControlField class. It wraps the DesignMode property of the host control. The code you just saw returns a dropdown-like user interface and characterizes the custom control field. Although the custom data control fields have to be manually coded in the editor, you have full visual support as far as properties editing is concerned. Smart tags and the Properties dialog box show custom fields correctly.
Figure 7 shows a sample master/detail page in action. The DetailsView control uses the CalendarField component to display the date of a data-bound order.
From Wikipedia, the free encyclopedia
Jump to: navigation, search
Control Data Corporation, or CDC, was one of the pioneering süpercomputer firms. For most of the 1960s they built the fastest computers in the world by far, only losing that crown in the 1970s to what was effectively a spinoff. CDC was one of the eight major computer companies through most of the 1960s; along with CDC these were IBM, Burroughs, NCR, General Electric, Honeywell, RCA, and UNIVAC. CDC was well known and highly regarded throughout the industry at one time, but today is largely forgotten.
Contents
[hide]
" 1 Background, origins: WWII-1957
" 2 Early designs; and Cray's big plan
" 3 Peripherals business
" 4 The CDC 6600: defining süpercomputing
" 5 The CDC 7600 and 8600
" 6 The STAR and the Cyber
" 7 ETA Systems, hard disks, oblivion
" 8 References
" 9 External links
[edit]

Background, origins: WWII-1957

During World War II the US Navy had built up a team of engineers to build codebreaking machinery for both Japanese and German mechanical ciphers. A number of these were produced by a team dedicated to the task working in the Washington, DC area. With the post-war wind-down of military spending the Navy grew increasingly worried that the team would break up and scatter into various companies, and started looking for ways to covertly keep the team together.
Eventually they found their solution; the owner of a Chase Aircraft affiliate in St. Paul, Minnesota was about to lose all his contracts with the end of the war, and after several meetings with increasingly high-ranking Naval officers he eventually agreed to house the team in his glider factory. The result was Engineering Research Associates (ERA), a contract engineering company that worked on a number of seemingly unrelated projects in the early 1950s.
One of these was one of the first commercial stored program computers, the 36-bit ERA 1103. The machine was built for the Navy, who intended to use it in their "above board" code-breaking centers. In the early 1950s a minor political debate broke out in Congress about the Navy essentially "owning" ERA, and the ensuing debates and legal wrangling left the company drained of both capital and spirit. In 1952 the owner sold ERA to Remington Rand.
Although Rand kept the ERA team together and developing new products, they were most interested in ERA's drum memory systems. Rand soon merged with Sperry Corporation to become Sperry Rand, and in the process of merging the companies, the ERA division was folded into Sperry's UNIVAC division. At first this did not cause too many changes at ERA, as the company was used primarily as engineering talent to help support a variety of projects. However one major project was actually moved from Univac to ERA, the Univac II project, which led to lengthy delays and upset everyone involved.
As the Sperry "big company" mentality encroached on the decision-making power of the ERA founders, they eventually got fed up and decamped to form Control Data in 1957, setting up shop in an old warehouse down the road in Minneapolis at 501 Park Ave. Of the members forming CDC, William Norris was the unanimous choice to become CEO of the new company. Seymour Cray was likewise chosen to be the chief designer, but was still in the process of completing an early version of the 1103-based Naval Tactical Data System (NTDS) and did not leave to join CDC until this was complete.
[edit]

Early designs; and Cray's big plan

CDC started business by selling parts, mostly drum systems, to other companies. Cray joined the next year and immediately built a small transistor-based 6-bit machine known as "Little Character" to test his ideas on large-system design and transistor-based machines. Little Character was a success, and they soon released a 48-bit transistorized version of their 1103 redesign as the CDC 1604 in 1959, with the first machine delivered to the US Navy in 1960. The 1604 designation was chosen by adding their address (501) to Cray's former project, the 1103. A 12-bit cut-down version was also released as the CDC 160A in 1960, arguably the first minicomputer. The 160A was particularly notable as it was built into a standard office desk, a rather unusual packaging for that era. New versions of the basic 1604 architecture were re-built into the CDC 3000 series, which sold through the early and mid-1960s.
Cray immediately turned to the design of a machine that would be the fastest (or in the terminology of the day, largest) machine in the world, setting the goal at 50 times the speed of the 1604. This required radical changes in design, and as the project "dragged on" (it took about four years in total) management became increasingly upset and demanded ever-greater oversight. Cray eventually got fed up and in 1962 demanded to be set up in his own remote lab, or he would quit. Norris agreed, and after a short search the team moved to Cray's home town of Chippewa Falls, Wisconsin.
[edit]

Peripherals business

Through the 1960s, Norris became increasingly worried that CDC had to develop "critical mass" in order to compete with IBM. In order to do this, he started an aggressive program of buying up various companies to round out CDC's peripheral lineup. In generally they tried to offer a product to compete with any of IBM's, but running 10% faster and costing 10% less. This was not always easy to achieve.
One of their first peripherals was a tape transport, which led to some internal wrangling as the Peripherals Equipment Decision attempted to find a reasonable way to charge other divisions of the company for supplying the devices. If the division simply "gave" them away at cost as part of a system purchase, they would never have a real budget of their own. Instead a system was worked out in which they would share profits with the divisions selling their peripherals, a system that would go on to be used throughout the company.
The tape transport was followed by the 405 Card Reader and the 415 Card Punch, followed by a series of tape drives and drum printers, all of which were designed in-house. The printer business was initially supported by Holly Carburetor in the Rochester suburb outside of Detroit. They later formalized this by creating a jointly-held company, Holly Computer Products. Holly later sold their stake back to CDC, the remains becoming the Rochester Division.
Norris was particularly interested in breaking out of the punch card-based workflow, where IBM held a stranglehold. He eventually decided to buy Rabinow Engineering, one of the pioneers of optical character recognition (OCR) systems. The idea was to bypass the entire punch card stage by having the operators simply type onto normal pages with a "known" typewriter font, then read those pages in whole to the computer. Since a typewritten page contains much more information than a card (which is essentially one line of a page) this would offer savings all around. Unfortunately this seemingly simple task turned out to be much harder than anyone expected, and while CDC became a major player in the early days of OCR systems, it has remained a niche product to this day. Rabinow's Rockville plant was eventually closed in 1976, and CDC eventually left the business.
With the continued delays on the OCR project, it became clear that punch cards were not going to go away any time soon, and CDC had to address this as quickly as possible. Although the 405 remained in production, it was an expensive machine to build. So another purchase was Bridge Engineering, who offered a line of lower-cost as well as higher-speed card punches. all card handling products were moved to what became the Valley Forge Division after Bridge moved to a new factory, with the tape transports to follow. Eventually the Valley Forge and Rochester divisions were spun-off to form a new joint company with National Cash Register, Computer Peripherals Inc., in order to share development and production costs across the two companies. ICL later joined the effort. Eventually the Rochester Division was sold to Centronics in 1983.
Another side-effect of Norris' attempts to diversify was the creation of a number of service bureaus that ran jobs on behalf of smaller companies that could not afford to buy a computer for themselves. This was never very profitable, and in 1965 several managers suggested the unprofitable centers be closed immediately in a cost-cutting measure. Nevertheless Norris was so convinced of the idea he refused to accept this, and ordered an across-the-board "belt tightening" instead.
[edit]

The CDC 6600: defining süpercomputing

Meanwhile at the new Chippewa lab Seymour Cray, Jim Thornton and Dean Roush put together a team of 34 engineers (themselves included), and continued work on the new design. In 1964 this was released as the CDC 6600, outperforming everything on the market by roughly ten times. The 6600 had a CPU with multiple asynchronous functional units, and used 10 logical, external I/O processors to offload many common tasks. That way the CPU could devote all of its time and circuitry to processing data while the other controllers dealt with mundane tasks like punching cards and running disks. Using late-model compilers the machine racks up .5 MFlops, while hand-coded assembly can deliver about 1 MFLOPS. A slower version was released as the CDC 6400; a two processor version of the 6400 was called the 6500. Cray turned to an even faster machine built along different lines, then known as the 6800.
It was after the delivery of the 6600 that IBM took notice of the new company. At the time Thomas J. Watson, Jr. asked (paraphrased) how is it that this tiny company of 34 people (including the janitor) can be beating us when we have thousands of people?, to which Cray quipped you just answered your own question. In 1965 IBM started an effort to build their own machine that would be even faster than the 6600, the ACS. Two hundred people were assembled on the west coast to work on the project away from corporate prodding, in an attempt to mirror Cray's offsite lab. The project produced interesting architecture and technology, but was not compatible with IBM's very successful System/360 line. It was redirected to be System/360-compatible, but this compromised performance, and ACS was eventually cancelled in 1969 after producing no product.
In the short term IBM also went ahead and announced a new version of the famed System/360 that would be just as fast as the 6600, the Model 92. This machine didn't exist, but that didn't stop sales of the 6600 from drying up while people waited for its release (a tactic known today as FUD). Norris didn't take this lying down, and a year later filed an antitrust suit against IBM, eventually winning over 600 million dollars and picking up the Servi
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

API - Uygulama Programlama Arabirimi

API - Uygulama Programlama Arabirimi
Api fonksiyonları DLL uzantılı Dynamic Link Libraries dosyalarından çağrılır. Fonksiyon olarak tanımlanan API'lerden geriye bir değer döner. Altprogram olarak tanımlananlardan bir değer geri dönmez. Form yada modüllerin (General) (Declaration) kısmında tanımlanırlar.

(General)Declerations)

Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" _

(ByVal hwnd As Long, ByVal baslik As String) As Long


Private Sub Command1_Click()

SetWindowText Form1.hwnd, "Yeni Başlık"

End Sub

Alt program olarak API tanımı:
Private/Public Declare Sub isim Lib "LibName" [parametreler]

Fonksiyon program olarak API tanımı:
Private/Public Declare Function isim Lib libname [parametreler] [As tip]

API doğru olarak tanımlandığı halde ilgili dosyada böyle bir API bulunmadığı mesajı alınıyorsa veya API ile aynı isme sahip bir VB komutu var ise bu durumda API isminin sonuna "A" ekleyerek Alias isimi kullanılır. Bunun sebebi Windows işletim sistemi farklı dilleri desteklemektedir. ANSI karakter setini destekleyen ülkeler için sonuna A harfi, UniCode veya iki karekter genişliğini kullanan ülke seti için ise sonuna W harfi eklemeniz gerekir.

Private/Public Declare Function/Sub isim Lib libname Alias "isim" [Parametreler] [As tip]

Alias kullanımı

Tanımlanacak bir yordama DLL kütüphanesi içindeki tanımından farklı bir isim verilmek istendiğinde yordamın DLL kütüphanesi içindeki adı Alias kısmında verilir.

(General)(Declaration)

Private Declare Function WindowsDiziniGoster Lib "kernel32" Alias _

"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long



Private Sub Command1_Click()

Dim n As Integer

Dim str As String

str = Space$(100)

n = WindowsDiziniGoster(str, 100)

Label1.Caption = Left$(str, n)

End Sub


API Fonksiyonları


DLL Fonksiyonları
Advapi32.dll Şifre ve Kayıt dosyası işlemleri gibi gelişmiş bir çok API'ler
Comdlg32.dll Diyalog pencereleri ile ilgili API'ler
Gdi32.dll Grafik API'leri
Kernel32.dll Çekirdek Windows API'leri
Lz32.dll 32 bit skıştırma API'leri
Mpr.dll Multiple Provider Router API'leri
Netapi32.dll 32-bit Network API'leri
Shell32.dll 32-bit Shell API'leri
User32.dll Kullanıcı arabirimi API'leri
Version.dll Versiyon işlemleri API'leri
Winmm.dll Multimedia API'leri
Winspool.drv Print spooler API'leri



API FONKSİYONLARI


Windows işletim sisteminin bazı fonksiyonlarının Visual Basic uygulaması içerisinde kullanılması istendiğinde API fonksiyonlarından yararlanılır. Böylece kullanıcı işletim sistemi ile karşı karşıya gelmeden sistemin bazı fonksiyonlarını VB uygulaması içerisinden yapabilmektedir. API (Application Programming Interface)'ler Windows'un dahili fonksiyonlarıdır.

API fonksiyonları hakkında bilgi almak için API Text Viewer kullanılır.
Başlat – Programlar – MS Visual Studio 6.0 – MS Visual Studio 6.0 Tools - API Text Viewer kullanılır.

veya

VB de Add-Ins menüsünden Add-In Manager kullanılabilir. VB 6 API Viewer seçilir ve Load Behaviors çerçevesinden Loaded/Unloaded ve Load On StartUp işaretlenirse VB her açıldığında Add-Ins menüsünden de erişilebilir.

API Viewer da File – Load Text File dan Win32api.txt dosyası seçilir.

Windows'u yeniden başlatma ve kapama
1- API Viewer dan ExitWindowsEx fonksiyonu seçilir.
2- Form tasarlanır.


3- Projeye bir modül eklenir.
4- Kullanacağımız ExitWindowsEx API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Option Explicit

Public Declare Function ExitWindowsEx Lib "user32" _
(ByVal uFlags As Long, ByVal dwReserved As Long) As Long

5- Private Sub Command1_Click()
Dim sonuc As Long
sonuc = ExitWindowsEx(2, 0)
End Sub

Private Sub Command2_Click()
Dim sonuc As Long
sonuc = ExitWindowsEx(1, 0)
End Sub








CD-ROM sürücüyü açıp-kapatan program
1- API Viewer dan mciExecute fonksiyonu seçilir.
2- Form tasarlanır.



3- Projeye bir modül eklenir.
4- Kullanacağımız mciExecute API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Public Declare Function mciExecute Lib "winmm.dll" _
(ByVal lpstrCommand As String) As Long

5- Program kodu yazılır:

Private Sub Command1_Click()
Dim sonuc As Long
sonuc = mciExecute("Set CDAudio door Open")
End Sub

Private Sub Command2_Click()
Dim sonuc As Long
sonuc = mciExecute("Set CDAudio door closed")
End Sub


Dosya kopyalama
1- API Viewer dan CopyFile fonksiyonu seçilir.
2- Form tasarlanır.


3- Projeye bir modül eklenir.
4- Kullanacağımız CopyFile ve DeleteFile API fonksiyonunu tanımlamak amacıyla Declare satırı modüle yapıştırılır:

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _
(ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" _
(ByVal lpFileName As String) As Long

5- Program kodu yazılır:

Private Sub Command1_Click()
Dim sonuc As Long, kaynakdosya As String, hedefdosya As String
kaynakdosya = InputBox("Kopyalanacak dosyanın adını ve yolunu giriniz")
hedefdosya = InputBox("Yeni dosyanın adını ve kopyalanacağı yeri giriniz")
sonuc = CopyFile(kaynakdosya, hedefdosya, 0)
End Sub

Private Sub Command2_Click()
Dim sonuc As Long, silinecekdosya As String
silinecekdosya = InputBox("Silinecek dosyanın adını ve yolunu giriniz")
sonuc = DeleteFile(silinecekdosya)
End Sub


DLL (DYNAMIC LINK LIBRARY – DEV_NGEN BAGLI KÜTÜPHANE)
KULLANIMI
Visual Basic tarafından saglanmayan bazı temel özellikleri kullanmak için DLL
kütüphanelerinde saklanan yordamları dogrudan çagırmak mümkündür. Bu yöntem
sayesinde Microsoft Windows isletim sisteminin belkemigi olan birçok yordamı ve
hatta baska dillerde yazılmıs baska kütüphanelere erismek ve bu yordamları Visual
Basic kodu içinde kullanmak mümkündür.
Adından da anlasıldıgı üzere DLL dosyaları birer kütüphanedir. Bu sebeple baska
uygulamalar tarafından da kullanılabilirler ve üzerine yapılan eklemelerden
programların çalısması etkilenmez. Microsoft Windows isletim sisteminin kendisi de
DLL dosyalarından yararlanır ve baska uygulamalar da bu DLL dosyalarını kullanarak
grafiksel islemleri, bellek yönetimini ve daha bir çok degisik islemi kolayca destekler.
Saglanan bu olanaklara Windows API (Application programming interface- Uygulama
programlama arabirimi) denir.
DLL kullanımından baska Visual Basic programları içinde kullanılabilecek bir özellik
de Otomasyon(Automation) olarak adlandırılan ve bir uygulamanın nesnelerini
dısarıdan (baska bir programın içinden) kullanabilme olanagını saglayan
mekanizmadır. Bu DLL kullanımından daha basittir ve hatalı durumlara düsme riski
daha azdır.
Bir DLL yordamını uygulamanın içinde kullanmak
DLL yordamları programın dısında olan ögeler oldugu için bunların program içinde
kullanılabilmesi için, içinde bulundukları dosyanın ve yordam parametrelerinin
program içinde tanımlanmaları sarttır. Bu islem bir Declare komutu sayesinde yapılır.
Herhangi bir DLL içinde bulunan bir yordam Declare komutu ile tanımlandıktan sonra
programnı içindeki diger yordamlar gibi kullanılabilir.
DLL kullanırken dikkat edilmesi gereken en önemli nokta, hatalı durumlara düsme
riskinin büyük oldugudur. Bu sebeple parametrelerine ve veri türlerine dikkat etmek
gerekir.
DLL kullanımına basit bir örnek olarak, USER32.DLL dosyasında bulunan ve bir
pencerenin baslıgını (Caption) degistiren SetWindowText yordamının kullanılısını
örnekleyelim. Bunun için önce asagıdaki Declare deyimi kullanılarak yordam
tanımlanmalıdır.
Bu örnek için yeni bir proje baslatın, formun üzerine bir CommandButton yerlestirin
ve asagıdaki kodu yazın.
Private Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" (ByVal hwnd As Long, _
ByVal baslik As String) As Long
Private Sub Command1_Click()
SetWindowText Form1.hwnd, "Degismis Baslik"
End Sub
Burada önce kullanılacak yordamın tanımı yapılmıstır. Tanım yapılırken
parametrelerin türüne dikkat edilmesi gerekir. Bu yordama yeni pencere baslıgı ikinci
parametre ile gönderilmektedir. Tanımlanan bu yordamın kullanılısı tıpkı normal bir
Visual Basic yordamının kullanılısına benzemektedir.
Microsoft Windows isletim sisteminin sagladıgı yordamların ve sabitlerin tanımları
Visual Basic ile birlikte gelen API text Viewer programı ile görülebilir. Bu program
sayesinde tanımlar Visual Basic programlarının içine kopyalanabilir.
Bu programın yukarıda tanımlanan yordamın tanımını kopyalarken durumu asagıdaki
gibidir.
Bu program kullanılarak Visual Basic ile birlikte gelen;
Apiload.txt
Mapi32.txt
Win32api.txt
Dosyaları içinde yer alan DLL yordamlarının tanımlarını programın içine kopyalamak
mümkündür.
Microsoft Windows API yordamlarına erisim
DLL dosyalarından programlar içinde en sık ihtiyaç duyulanları ve kullanılanları
Windows API olarak bilinen, Windows isletim sisteminin sagladıgı fonksiyon ve
yordamları içeren DLL dosyalarıdır.
Windows API binlerce yordam, tür tanımı ve sabit tanımlarını içerir. Bu yordamlar C
dilinde yazılmıstır, bu yüzden Visual Basic içinde kullanılırken dikkatli bir biçimde
yeniden tanımlanmaları gerekir. Visual basic bu islem için yukarıda da bahsedildigi
gibi API Text Viewer programını ve bu tanımların Visual Basic için yapılmıs halini
içeren bir metin dosyasını kullanıcılara sunmaktadır.
API Text Viewer programı metin kütüklerini, daha hızlı erisim ve kolay aramayı
saglamak için Jet Veritabanlarına çevirebilme özelligine de sahiptir.
Görüldügü üzere Windows API yordamlarının tanımlanmasında herhangi bir sorun
yoktur. Çünkü zaten hazır tanımları bulunmaktadır ve tek yapılması gereken bu
tanımları Visual Basic kodunun içine almaktır.
Windows API dısındaki bir DLL dosyasından yordamlar kullanılacagı zaman uygun
tanımı yapmak çok önemlidir. Aksi takdirde istenmeyen durumlar olusabilir.
DLL içindeki bir yordamın tanımlanması
Windows API dısındaki DLL dosyaları içinden yordam kullanmak veya win32api.txt
dosyası içinde yapılmıs olan tanımları kendi gereksinimlerimize göre degistirmek için
DLL içindeki bir yordamın nasıl tanımlanabilecegini ögrenmek gerekir.
Bir DLL yordamını tanımlamak için Declare deyimi kullanılır. Eger yordam bir deger
döndürüyorsa Function, döndürmüyorsa Sub olarak tanımlanır. Declare deyiminin
kullanısı asagıdaki biçimdedir.
Declare Function publicname Lib "libname" [Alias "alias"]
[([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type
Declare Sub publicname Lib "libname" [Alias "alias"]
[([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])]
Kütühane _smi (libname)
Windows kütüphaneleri için (User32, Kernel32 veya GDI32) dosyanın tam adını ve
yolunu belirtmeye gerek yoktur. Örnegin;
Declare Function GetTickCount Lib "kernel32" Alias _
"GetTickCount" () As Long
Diger DLL dosyaları kullanılırken tam yol ve dosya adı verilmek zorundadır
Declare Function Topla Lib "c:\hesap.dll" _
(ByVal sayi1 As Integer, ByVal sayi2 As Integer) As Long
DLL dosyasının yolu verilmezse bu dosya için;
o Programın .EXE dosyasının bulundugu yere,
o Aktif dizine,
o Windows'un System dizinine,
o Windows dizinine,
o PATH degiskeninde tanımlı dizinlere
bakar.
Parametre türlerini belirlemeden önce sık kullanılan bazı DLL dosyalarının tanımlarını
verelim.
Advapi32.dll Advanced API services library supporting numerous APIs
including many security and Registry calls
Comdlg32.dll Common dialog API library
Gdi32.dll Graphics Device Interface API library
Kernel32.dll Core Windows 32-bit base API support
Lz32.dll 32-bit compression routines
Mpr.dll Multiple Provider Router library
Netapi32.dll 32-bit Network API library
Shell32.dll 32-bit Shell API library
User32.dll Library for user interface routines
Version.dll Version library
Winmm.dll Windows multimedia library
Winspool.drv Print spooler interface that contains the print spooler
API calls
String kullanan Windows API yordamları
String kullanan Windows API yordamlarını kullanmak için karakter kümesini belirtmek
gerekir. Bu karakter kümesi ANSI veya Unicode olabilir. Windows 95 için kullanılan
karakter kümesi ANSI karakter kümesidir. Windows API içinde bu durum için bir
yordamın genelde iki tanımı birden olur. Bunlardan biri ANSI kodunu destekler, diger
Unicode kodunu destekler. Yukarıda verilen örnekteki SetWindowsText yordamı için
USER32.DLL dosyasında, SetWindowsTestW ve SetWindowsTextA olarak
adlandırılmıs iki ayrı tanım sözkonusudur. Bu tanımlardan hangisinin kullanılmak
istendigi Alias kısmında verilen isim ile belirtilir.
Parametreleri deger ile veya referans ile gönderme
Visual Basic yordamlarında eger belirtilmemisse parametre geçis yöntemi referans ile
göndermedir. Bunun anlamı parametre olarak verilen degiskenin degeri yerine bellek
adresinin gönderilmesidir.
Çogu DLL yordamı parametrelerinin degerle aktarılmasını öngörürler. Bu tür
yordamlara referans ile parametre gönderilirse hatalı bir veri gönderilmis olur.
Örnegin yukarıda bir formun baslıgını degistiren örnekte ilk parametre olan HWND
parametresi tanımı yapılırken referans ile gönderme türünden tanımlanmıs olsaydı bu
bir hata olurdu. Çünkü bu yordamın DLL kütüphanesi içindeki tanımında bu
parametre deger ile gönderilen bir parametredir.
Bir parametreyi deger ile göndermek için ByVal, referans ile göndermek için de
ByRef sözcükleri kullanılır.
Herhangi bir DLL kütüphanesinin C dilindeki tanımından yararlanarak bir tanım
yapılırken, diziler dısındaki degiskenlerin ByVal olarak gönderildigi dikkate
alınmalıdır.
Alias kullanımı
Tanımlanacak bir yordama DLL kütüphanesi içindeki tanımından farklı bir isim
verilmek istendiginde yordamın DLL kütüphanesi içindeki adı Alias kısmında verilir.
Örnek olarak, önce bir proje yaratın ve formun üzerinde bir CommandButton ve bir
Label yerlestirin. Daha sonra asagıdaki kodu ekleyin.
Private Declare Function WindowsDiziniGoster Lib "kernel32" _
Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
Private Sub Command1_Click()
Dim n As Integer
Dim str As String
str = Space$(100)
n = WindowsDiziniGoster(str, 100)
Label1.Caption = Left$(str, n)
End Sub
Bu program çalıstırılıp form üzerindeki butona basıldıgında bilgisayardaki windows
dizini form üzerindeki Label nesnesine yazılır.
Esnek parametre türleri
Bazı DLL kütüphaneleri aynı parametre degiskeni için birden fazla türün
kullanılmasına izin verir. Eger farklı türlerden veriler bu tür yordamlara
gönderilecekse parametre tanımları Any türü olarak tanımlanmalıdır.
Buna örnek olarak asagıdaki tanım verilebilir.
Declare Function MapWindowPoints Lib "user32" Alias _
"MapWindowPoints" (ByVal hwndFrom As Long, _
ByVal hwndTo As Long, lppt As Any, _
ByVal cPoints As Long) As Long
Bu yordam bir nokta dizisinin bir penceredeki konumunu verilen bir baska pencere
üzerindeki bir konuma çevirir. Sonuç, yordamın 3. Parametresi içinde döndürülür. Bu
parametre POINT türünde veya RECT türünde olabilir. Bu türler sırasıyla 2 ve 4 Long
türünde sayı içeren türlerdir.
As Any kullanımı her ne kadar esneklik saglıyorsa da kullanılırken dikkatli
olunmalıdır. Yanlıs veri türleriyle kullanılınca ancak çalısma esnasında bu fark
edilebilir.
Parametre olarak String gönderme
Genelde string türü degiskenler ByVal olarak gönderilir. Visual Basic içinde string türü
BSTR olarak bilinen bir yapıyı belirtir. Bu yapı string uzunlugu ve içerigi hakkında
bilgiler tutar. Bu yapı parametre olarak bir yordama gönderildiginde yordamın bu
yapıdaki içerik bilgisini degistirmesine olanak verilir.
WinAPI yordamlarında genellikle LPSTR olarak adlandırılan C string yapıları
kullanılır. Bu parametrelere karsılık olarak Visul Basic içinde kullanılan BSTR
verilebilir.
Bu kullanımı yukarıda Windows dizinini almak için kullanılan örnekten görmek
mümkündür. Windows dizini ByVal olarak tanımlanmıs olan String türündeki bir
degisken içinde döndürülmektedir.
Genel olarak LPSTR türü string bekleyen yordamlara String türü degiskenler
parametre olarak verilebilir.
Bir DLL yordamına BINARY verilerden olusan bir karakter dizisi parametre olarak
verilecekse, String yerine Byte dizisi gönderilmelidir.
Parametre olarak dizi gönderme
Dizinin herhangi bir elemanını parametre olarak göndermek dizinin türü ile aynı
türden olan bir degiskeni göndermekten farksızdır. Ancak bazen tüm diziyi parametre
olarak göndermek gerekebilir. Bu durumda dizi tıpkı Visual Basic yordamlarında
oldugu gibi bos parantezlerle göderilir.
Sayı içeren bir dizinin ilk parametresini ByRef olarak göndermek, bütün diziyi
göndermek anlamına gelir. Bu yaklasım string dizileri için de geçerlidir. C dilinde
string dizileri gösterge içeren diziler olarak algılanır ve Visual Basic ile aynı sekilde
kullanılır.
Kullanıcı tarafından tanımlanmıs türlerin kullanımı
Bunu örneklemek için asagıdaki örnegi inceleyin.
Private Type RECT
sol As Long
ust As Long
sag As Long
alt As Long
End Type
Private Declare Function RenkleriTersCevir Lib "User32" Alias "InvertRect"
_
(ByVal hdc As Long, lpRect As RECT) As Long
Dim rect1 As RECT
Private Sub Form_Load()
ScaleMode = 3
End Sub
Private Sub Form_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button And 1 Then
rect1.sol = X
rect1.ust = Y
rect1.sag = X
rect1.alt = Y
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Not (Button And 1) Then
rect1.sag = X
rect1.alt = Y
RenkleriTersCevir hdc, rect1
End If
End Sub
Bu program mouse basılı tutularak seçilen bir alandaki renkleri ters çevirir. InvertRect
yordamına parametre olarak program içinde tanımlanan RECT türü gönderilmistir.
Burada dikkat edilmesi gereken önemli bir husus gönderilen türün yordamın ihtiyaç
duydugu tür ile aynı yapıda olmasına dikkat edilmelidir.
DLL yordamlarına fonksiyon göstergelerini parametre olarak gönderme
Fonksiyon göstergesi, kullanıcı tarafından tanımlanmıs fonksiyonların adreslerini
belirtir. Bu göstergeler, bir DLL yordamı kullanıcı tarafından tanımlanmıs bir yordamı
kullanacagı zaman kullanılır. Fonksiyon göstergelerini kullanmak için Address of
fonksiyon_adı deyimi kullanılır.
Diger türlerin parametre olarak gönderilmesi
•String türü bir degiskene bos gösterge göndermek gerektiginde vbNullString
sabiti kullanılır.
Örnegin FindWindow yordamı belli bir pencereyi baslıgı sayesinde bulur ve bu
pencereye bir gösterge döndürür.
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Bu yordamın kullanılısı asagıdaki gibi olabilir.
hWndExcel = FindWindow(vbNullString, "Microsoft Excel")
Bu yordamda ilk parametre bos bir string olarak gönderilmektedir.
•Nesne özellikleri de yordamlara parametre olarak gönderilebilir. Özellikler
parametre olarak gönderilirken ByVal olarak gönderilmelidir. ByRef olarak
kullanmak için ara bir degiskene ihtiyaç duyulur.
•Nesne göstergelerini parametre olarak göndermek mümkündür. Örnegin bir
formun hWnd ve hDC göstergelerini bir yordama parametre olarak göndermek
mümkündür.
•Variant türündeki bir degiskeni Variant olmayan bir degiskenin yerini tutması
için göndermek gerektiginde ByVal olarak gönderilir.
C tanımlarını Visual Basic tanımlarına dönüstürme
DLL dosyaları içindeki yordamlara ait dokümanlar genelde C diline uyumlu olarak
yazılmıstır. Bunları Visual Basic içinde kullanabilmek için tanımları çevirmek gerekir.
Bu çevirinin bir parçası da C dilindeki türler için uygun Visual Basic veri türlerini
kullanmak ve parametre geçis yöntemini belirlemektir.
Bu çeviri islemi için asagıdaki tablo kullanılabilir.
C veri türü Visual Basic içinde tanımıNe tür degerlerle çagrılabilecegi
ATOM ByVal variable As Integer Integer
BOOL ByVal variableAs Long Long
BYTE ByVal variable As Byte Byte
CHAR ByVal variable As Byte Byte
COLORREF ByVal variable As Long Long
DWORD ByVal variable As Long Long
HWND, HDC, HMENU,
etc. (Windows
handles)
ByVal variable As Long Long
INT, UINT ByVal variable As Long Long
LONG ByVal variable As Long Long
LPARAM ByVal variable As Long Long
LPDWORD variable As Long Long
LPINT, LPUINT variable As Long Long
LPRECT variable As type
Kullanıcı tarafından
tanımlanmıs herhangi
bir tür
LPSTR, LPCSTR ByVal variable As String String
LPVOID variable As Any
Herhangi bir degisken
(string türü için
ByVal)
LPWORD variable As Integer Integer
LRESULT ByVal variable As Long Long
NULL
As Any or ByVal Nothing, ByVal
0 & ByVal variable As Long
vbNullString
SHORT ByVal variable As Integer Integer
VOID Sub procedure Desteklenmez
WORD ByVal variable As Integer Integer
WPARAM ByVal variable As Long Long
Örnek: Windows'u kapatan program.
Bu örnek için yeni bir proje yaratın ve içindeki formu silip yerine bir module ekleyin.
Bu modülün içine asagıdaki kodu ekleyin.
Option Explicit
Private Declare Function WindowsKapat Lib "user32" Alias _
"ExitWindowsEx" (ByVal uFlags As Long, ByVal dwRes As Long) As Long
Private Sub Main()
If MsgBox("Windows'u kapatmak " & vbCrLf & "istiyor musunuz", _
vbYesNo, "Windows Kapaniyor") = vbYes Then WindowsKapat &H41, 0
End Sub
Bu programı çalıstırmadan önce projeyi kaydedin. Daha sonra File menüsünden
proje için bir .EXE dosyası olusturun. Bu program çalıstırıldıgında Windows kapanır.
Burada uFlags parametresi için gönderilen deger, tüm programların kapatılıp
windows'un kapatılması anlamına gelmektedir.



Library Container API Kütüphane Container API'si

The BasicLibraries ve DialogLibraries com.sun.star.script.XLibraryContainer'dan türetilen com.sun.star.script.XLibraryContainer2'i tarafından desteklenir ki buda com.sun.star.container.XNameContainer servisinden gelir. Basic geliştiricileri bir metot kullanabilmek için yerleşimi bilmek zorunda değildir. Fakat API referanslarındaki metotlara incelenirken bilinmesi yararlıdır.
XLibraryContainer2 varolan kütüphane bağlantılarını ve yazma korumalarını kontrol eder. Kütüphanelerin isminin değiştirilmesi içinde kullanılır Metotlar ilerleyen kısımda ayrıntılı olarak anlatılmıştır :
boolean isLibraryLink( [in] string Name)
string getLibraryLinkURL( [in] string Name)
boolean isLibraryReadOnly( [in] string Name)
void setLibraryReadOnly( [in] string Name, [in] boolean bReadOnly Sadeceoku)
void renameLibrary( [in] string Name, [in] string NewName)
XLibraryContainer kütüphane ve kütüphanne yollarını syaratır veya siler. Buna ilaveten bir kütüphanenein yüklü olup olmadığını test eder veya gerekliyse, yükler.
com::sun::star::script::XNameContainer createLibrary( [in] string Name)
com::sun::star::script::XNameAccess createLibraryLink( [in] string Name,
[in] string StorageURL, [in] boolean ReadOnly)
void removeLibrary( [in] string Name)
boolean isLibraryLoaded( [in] string Name)
void loadLibrary( [in] string Name)
XNameContainer metotlarıyla container'lardaki kütüphanelere erişim ve yönetimi sağlanır:
void insertByName( [in] string name, [in] any element)
void removeByName( [in] string name)
any getByName( [in] string name)

void replaceByName( [in] string name, [in] any element)

sequence < string > getElementNames()
boolean hasByName( [in] string name)
type getElementType()
boolean hasElements()
UNO API'sinde bu metotlarla erişim sağlanır. 3.4.3 Profesyonel UNO - UNO dili ile bağlanma - OpenOffice.org Basic. bölümünde açıklandığı gibi UNO API kullanılır. Not: Bu arabirimler sadece OpenOffice.org Basic ile kullanılabilir.diğer ortamlarda kaullanmak mümkün değildir.
Kütüphaneler container'lara iki farklı yol ile eklenir:
Creating a New Library Yeni kütüphane yaratarak
CreateLibrary() metodunun kullanımı ile yeni bir kütüphane yaratılır. Bu metotla yaratılmış kütüphane Yöntemin çağrılmış olduğu Container'a aittir. hod. A library created with this method belongs to the library container where createLibrary() has been called. Kütüphane container'ı uygulaması bu kütüphanenin yüklenmesi ve saklanması için sorumludur.Bu işlev şu an için arabirimler tarafından sağlanmaz. Onun için uygulama nerede ve nasıl olacağını belirlemelidir. createLibrary() kütüphane elemanlarına erişim ve kütüphane düzenlenmesi için bir Standard com.sun.star.container.XNameContainer arabirimiyle döner .
İlkin, böyle bir kütüphane boştur ve yeni kütüphane elemanları yerleştirilir. Kütüphaneyi değişikliklerden korumak için setLibraryReadOnly() metotu da kullanılabilir. Sadece oku kütüphanelerine yeni elemanlar eklenip silinemez ve Basic modülleri ile formlar değiştirilemezler. Ek bilgi için 11.2 OpenOffice.org Basic and Dialogs - OpenOffice.org Basic IDE kısımına bakın.Sedece oku statüsü API üzerinden değiştirilebilir..
Creating a Link to an Existing Library Varolan kütüphaneye bağ oluşturulması
Varolan kütüphaneye bir bağ oluşturulması createLibraryLink() metodunun kullanılmasıyla sağlanır. StorageURL parametresi kütüphane ile kütüphane .xlb dosyası yolu verilir. Bu konu için Ekstra bilgi 11.7 OpenOffice.org Basic and Dialoglar - Kütüphane dosyası yapısı konusuna bakın. Bir kütüphane bağı Kütüphane containeri da dahil olarak refere edilebilir. onun için kütüphane deposu dosyanın saklanmasından sorumlu değildir. Bu sadece StorageURL parametresi ile tanımlanır.
ReadOnly parametresi Kütüphane bağının statüsünü sadece oku'ya çevirir. Bu durum bağlanmış Kütüphanenin statüsünden bağımsızdır. Bağlanmış kütüphane kütüphane ile bağ statüsü read only ise değiştirilebilir. Örneğin, bu mekanizma network sürücüsünde bulunan bir kütüphaneyi read-only yapmaya gerek kalmaksızın read-only olarak erişim imkanı sağlar, böylece yetkili kişiler tarafından kolaylıkla değiştirilebilir.
Library container'ları tarafından desteklenen metotlar İlişik tablolarda kısaca belirtilmiştir:
Selected Methods of com.sun.star.script.XLibraryContainer2

isLibraryLink()
boolean. mantıksal Bir kütüphanenin Container'a bağ olarak eklenip eklenmediği sorgulanaır. Geri dönen değer doğru veya yanlıştır.
getLibraryLinkURL()
string. metin Bağlanmış kütüphanenin StorageURL yolunu gösteren dize ile geri döner. createLibraryLink(...) metodundaki parametresine karşılık gelen dizedir. Sonuç GUI üzerinden kullanıcıya gösterilebilir.
isLibraryReadOnly()
boolean. kütüphaneyi sadece oku durumunu getirir. Kütüphane bağlantısı ise false olarak döner. Böylece bağ yada bağlanmış kütüphane read-only değilse değiştirilebilir.
renameLibrary()
Kütüphane adını değiştirir. Kütüphane bağ olarak eklenmişse sadece yol adı değiştirilir.

Selected Methods of com.sun.star.script.XLibraryContainer

loadLibrary()
void. Bir kütüphane yükler
isLibraryLoaded()
boolean. Kullanıcının bir kütüphanenin daha önceden yüklendiğini öğrenmesini sağlar.
removeLibrary()
void . Kütüphane deposundan bir kütüphaneyi siler. Şayet bu bir bağ ise bağ silinir..




API NEDİR?

İşletim sistemlerine duyulan ihtiyaçlardan biri standart olarak her program tarafından yapılması gereken şeyleri ortak bir çatı altında toplamak ve programları sistemde belirli kurallar altında çalışmasını sağlamaktır. İşletim sistemlerinin değerini anlamak için işletim sistemi olmayan bir bilgisayar düşünün.

Yaptığınız programları diske kaydetme ihtiyacınız var. İşletim sisteminiz yoksa programlarınızı diske yazacak ve okuyacak assembly kodları sizin yazmanız gerekecektir. Ve her program diske yazma ve okuma kodlarını içinde bulundurmak zorunda olacaktır. Ayrıca diske yazacağınız programı diskin neresine yazacaksınız. Tabi ki herkes kendi programının başa yazılmasını isteyecektir. Bu da diski paylaşım sorununu çıkaracaktır. Ayrıca yazıcı için de problem vardır. Her yazıcı aynı sistemle çalışmayacağı için programınızda yazdırma işlemleri de varsa belli başlı yazıcı tipleri için gerekli kodları yazmanız gerekecektir. Bu örnekler çoğaltılabilir.

İşte PC'ler ilk çıktığında disk işlemlerini kolaylaştırmak için DOS ta piyasaya çıktı. DOS disk işlemlerini yapmak için yazılım interruptlarını programcıların hizmetine sunmuştu. Diskle ilgili bir işleminiz için INT X'in Y numaralı servisini çağırıyordunuz ve bu işlemleri sizin yerinize DOS yapıyordu. Sistemler geliştikçe bilgisayar değişik alanlara da hitap etmeye başlayınca çok değişik arabirimler de çıktı. DOS'a grafik, yazıcı işlemleri gibi standart işlemler de eklendi ve sistemde bulunan standart donanımların hemen hemen hepsine DOS veya BIOS interruptlarıyla erişebiliyordunuz. Ayrıca DOS programların belleği nasıl kullanacağını da belirliyordu. DOS işletim sistemi olarak kullanıcıya herhangi bir standart arabirim sunmamıştır. Sadece programların sistemdeki standart donanımlara ulaşabilecekleri kodları kullanıcıya sunmuştur. DOS'ta yapılan programların hiçbiri bir birine benzemez. Her program kendi kullanıcı arayüzünü belirlemek zorundadır ve bunun için gerekli kodu kendisi yazmak zorundadır. DOS'ta yapılan programların kullanım ve programlanmasının zorluğu da bir ölçüde buradan kaynaklanır.

DOS'un programlara standart bir arabirim sunmaması, bellek sınırlarının olması gibi sebeplerden dolayı çok çok geç kalmış olsada Windows çıktı. Windows DOS'un sağladığı standart donanıma ulaşma haricinde Ses kartları, Gelişmiş yazıcılar, Scanner'ler gibi donanımların kullanımını da programların kullanımına sunar. Ayrıca programlara standart arabirimleri (Diyalog kutuları, Formlar, Kontroller gibi) kullanma imkanı da sunmuştur. DOS kendi servislerini yazılım interruptlarıyla sunarken Windows API'lerle sunar.

Şimdi şöyle bir şey düşünülebilir. DOS'ta çok program yaptım ama diske birşey yazdırmak için DOS'un interruptlarını kullanmaya hiç ihtiyaç duymadım. Evet eğer assembly program yazmadıysanız bunlara da ihtiyacınız yoktur. Çünkü kullandığınız programlama dili bu işi sizin yerinize yapıyordu. Bu VB'de yaptığınız programlarda da böyledir. API kullanacaksınız diye bir şart yok VB bunları sizin yerinize kullanır. Ancak DOS'taki programlama dillerinde olduğu gibi VB'de de programlama dilinin sunduğu işlemler her zaman işinizi görmeyebilir, bu durumda Windows API'lerini kullanma ihtiyacı duyarsınız.

Basic herhalde bütün zamanların en yavaş programlar üreten dili olma özelliğini kimseye kaptırmak istemiyor. Quick Basicte yaptığınız bir program, aynı işi yapan C ile yapılmış programdan en az 5 kat daha yavaş çalışacaktır. Bu fark GWBasic'te daha da büyüktür. VB'de de durumun iç açıcı olduğunu iddia etmek çok güç. Programlarınızda API kullanmanız bu hız barajlarını aşmanızı sağlayacaktır. Ayrıca VB'nin sunmadığı bazı işlemler için de API kullanmak gerekir. Örneğin sistemdeki boş bellek miktarını verecek herhangi bir komut VB'de bulunmaz bunu da yine API kullanarak öğrenmek zorundasınız.

Windows'un sunduğu bu API'ler gruplandırılarak bir çok DLL ve EXE dosyasına konmuştur. VB'de kullanılan OCX dosyalarında da API'ler bulunabilir. Bu API'lerden birini kullandığınızda API'nin bulunduğu DLL sisteme daha önce yüklenmemişse önce bu DLL yüklenir ve API çalıştırılır.

Programınızda API kullanmak için Declare deyimiyle API'yi tanımlamanız gerekir. Bu tanımdan sonra tanımladığınız API'ye bir fonksiyon veya bir altprogram gibi ulaşabilirsiniz.

VB'de API Tanımı
________________________________________

VB'de API'ler iki şekilde tanımlanabilir. Fonksiyon veya altprogram olarak. Fonksiyon olarak tanımlanan API'lerden geriye bir değer dönerken, altprogram olarak tanımlananlardan bir değer geri dönmez.

Alt program olarak API tanımı:

Private/Public Declare Sub isim Lib "libname" [([parametreler])]

Fonksiyon program olarak API tanımı:

Private/Public Declare Function isim Lib libname [([parametreler])] [As tip]

Burada isim fonksiyonun ismidir ve programda API bu isimle çağrılır. Libname kullanılan kütüphanenin ismi, parametreler; fonksiyona giren parametreler, As tip; fonksiyondan dönen değerin tipidir.

API'nin tanımlanacağı yer formun veya modülün General-Declerations kısmıdır. API'yi bir formun decleration kısmında tanımlarsanız API'yi yalnız o formun altprogramlarından çağırabilirsiniz. Bir modülde tanımlarsanız programınızın her yerinde kullanabilirsiniz.

API'yi doğru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API bulunmadığını söylüyorsa veya API ile aynı isme sahip bir VB komutu var ise bu durumda Alias isimleri kullanmanız gerekir.

Private/Public Declare Function/Sub isim Lib libname Alias "isim" [([parametreler])] [As tip]

API'yi doğru olarak tanımladığınız halde VB, ilgili dosyada böyle bir API bulunmadığını söylüyorsa API isminin sonuna A ekleyerek Alias ismi olarak vermeniz gerekir. Bunun sebebi Windows işletim sisitemi farklı dilleri desteklemektedir. ANSI karakter setini destekleyen ülkler için sonuna A harfi, UniCode veya iki karekter genişliğini kullanan ülke seti için ise sonuna W harfi eklemeniz gerekir.

API tanımı yaparken kullanacağınız tiplerin isimlerini ise C'den VB'ye çevirmeniz gerekir. Genel olarak tip karşılıkları şöyledir.
C Visual Basic
atom ByVal değişken AS integer
bool ByVal değişken As Long
byte ByVal değişken As Byte
char ByVal değişken As Byte
colorref ByVal değişken As Long
dword ByVal değişken As Long
hwnd,hdc,hmenu vb ByVal değişken As Long
int,uint ByVal değişken As Long
long ByVal değişken As Long
lparam ByVal değişken As Long
lpdword değişken As Long
lpint,lpuint değişken As Long
Iprect değişken As type
Ipstr,Ipcstr ByVal değişken As String
Ipvoid değişken As Any
lpword değişken As Integer
lresult ByVal değişken As Long
null değişken As Any veya ByVal değişken As Long
short ByVal değişken As Integer
void Sub procedure
word ByVal değişken As Integer
wparam ByVal değişken As Long
16 bit ByVal değişken As Integer
32 bit ByVal değişken As Long
float ByVal değişken As Single
double ByVal değişken As Double

Parametrelerden biri iki farklı tipte değer alabiliyorsa bunu As Any olarak tanımlamanız gerekir. Hangi parametrenin Any olarak tanımlanması gerektiğine ancak dosyadaki bilgileri okuyarak anlayabilirsiniz. Örneğin bir parametre hem string içerebiliyor ve hemde Null içerebiliyorsa bu parametre Any olarak tanımlanmalıdır.

Yaptıkları işlere göre API'lerin bulundukları dosyalar ise şunlardır :
DLL Fonksiyonları
Advapi32.dll Şifre ve Kayıt dosyası işlemleri gibi gelişmiş bir çok API'ler
Comdlg32.dll Diyalog pencereleri ile ilgili API'ler
Gdi32.dll Grafik API'leri
Kernel32.dll Çekirdek Windows API'leri
Lz32.dll 32 bit skıştırma API'leri
Mpr.dll Multiple Provider Router API'leri
Netapi32.dll 32-bit Network API'leri
Shell32.dll 32-bit Shell API'leri
User32.dll Kullanıcı arabirimi API'leri
Version.dll Versiyon işlemleri API'leri
Winmm.dll Multimedia API'leri
Winspool.drv Print spooler API'leri
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

TreeView nesnesi

TreeView denetiminin kullanılması

treeview denetimi,ağaç tarzında şık bir biçimde organize edilebilen klasör veya başka öğelerin hiyerarşik bir görünümünü sunar. Bu denetim genellikle treeview denetiminde seçili olan klasörün içeriğini görüntülemek için kullanılan bir list view denetimini ile bir arada kullanılır.

Tree view özellikleri (properties)
tree view denetiminin çok sayıda özelliği vardır,üstelik bunların çoğu oldukça değerlidir:

Appearange
BorderStyle
CausesValidation
CheckBoxes
Container
DragIcon
DragMode
DropHighLight
Enabled
Font
FullRowSelect
Height HelpContextID
HideSelection
HotTracking
HWnd
ImageList
Indentation
Index
LabelEdit
Left
LineStyle
Nodes
Object
OleDragMode
OleDropMode
Parent
PathSeparator
Scroll
MouseIcon
MousePointer
Name
SelectedItem
SingleSel
Sorted
Style
TabIndex
TabStop
Tag
ToolTipText
Top
Visible
WhatsThisHelpID
Width

standart özelliklerin yanı sıra,bu denetimin gücünden faydalanmak için tanımanız gereken yeni birkaç özelleğide vardır. name özelliği,bu denetimle çalışırken değerini
atamanız gereken ilk özelliktir.standart isimlendirme konvansiyonu ön takısı tvw'dur.örneğin sabit sürücünüzün dizin yapısınıiçeren bir ağaç görünümünüz olursa ona tvwdirectories ismini verebilirsiniz.

General sekmesi

style özelliği denetimin form üzerinde nasıl görüneceğini ve davranacağını belirlemenizi sağlar. Bu özelliğe verebileceğiniz olası değerler aşağıdadır:

0-tvwtextonly: bu ayar düğümünün sadece metnini gösterir.
1-tvwpicturetext: Bu ayar düğümlerin simge ve metinlerini gösterir.
2- tvwplusminustext: Bu ayarı açık/kapalı sembolü (artı ve eksi işaretleri) ile düğümlerin simge ve metinlerini istiyorsanız kullanın.
3- tvwpluspicturetext: Bu ayarı açık/kapalı sembolünümetnin sol tarafından küçük bir simge ve metnin kendisini görüntüler.
4-tvwtreelinestext: Ağacın hiyerarşisinde ilgili olan düğümleri birbirine bağlayan çizgiler olmasını isterseniz,bu ayarı düğümün çizgileri ve metninin göstermek için kullanırız.
5-tvwtreelinespicturetext: Bu ayarı metnin sol tarafında küçük bir simge görüntüler ve ilgili düğümleri birbirine bağlar.
6-tvwtreelinesplusminustext: Bu ayarı açık/kapalı sembolü,bağlantı çizgilerini ve düğüm metnini göstermek için seçin.
7-tvwtreelinesplusminuspicturetext: Her şeyin gösterilmesi için bu ayarı seçin.

LineStyle özelliği Düğümler arasında görüntülenen çizgilerin stillerini ayarlamak için kullanılır. olası değerler aşağıdadır:
0-treelines
1-rootlines

labeledit, denetiminin otomatik etiket düzenleme özelliğini açıp kapatmanızı sağlayan boolean bir özelliktir. Windows explorer bu özelliği bir klasör veya dosya tek tıkladığımızda sergiler. Bu isim kendisini değiştirmenize olanak veren minyatür bir metin kutusuna dönüşür. Etiket düzenlemeyi devreye sokmak için bu özelliğin true yapın, devreden çıkartmak için ise false yapmanız yeterlidir.
tree view denetiminizde resimler olmasını isterseniz ImageList özelliğine eşitlemeniz yeterlidir.
borderstyle ve apperance özellikleri yeterince açıktır.
oledragmode özelliği denetimini elle veya otomatik sürüklemeyele konfigüre edilebilir. Bu özelliğe aşağıdaki değerlerden birini atayabiliriz:
0-oledragmanual
1-oledragautomatic
oledropmode özelliği tree view denetiminin ole bırakma işlemlerinin kabul veya ret edecek biçimde konfigüre eder. Bu özelliğin değeri aşağıdakilerden biri olabilir:

0-oledropnone: Bu değer atandığında hedef bileşen ole bırakmalarını kabul etmez ve nodrop imlecini görüntüler.

1-oledropmanual: Denetim programcının ole bırakma işlemini kod içinde yönetmesine olanak verecek biçimde ole bırakma olaylarını tetikler.

Indetation özelliği görünümdeki düğümler arasındaki yatay mesafeyi belirler. Bu sayı ne kadar küçük olursa düğümlerde de birbirine o kadar yakın olur. Daha sıkı görünen bir arabirimi tercih edreseniz 283 değerinin çalışma kipinde hoş göründüğünü söyleyebilirim.
pathseparatr özelliği bir düğümün fullpath özelliği tarafından döndürülen yol için kullanılan ayraç karakterini aşağıdaki biçimde atamanıza veya döndürmenize olanak verir.

private sub treeview1_nodecilik(byval node as node)
dim rc as string
rc=node.fullpath
mshbox rc
end sub

örneğin,sabit sürücünüz üzerindeki klasörün bir listesinigösteriyorsanız bu özelliğindeğerini ters bölü (*) yapabilirisiniz ya da LAN üzerindeki IP alt ağlarını eşlerken internet tarzı bir yol belirtmek için bu nokta(.) kullanabilirsiniz. tree view denetiminin kaydırma çubuklarının denetimini göstermesini isterseniz scroll özelliğinin değerini true yapın;tree view denetiminde bir seferde görüntülenemeyecek kadarçok sayıda düğüm olursa bu işlem gerekli olabilir. Kaydırma çubuklarını devreden çıkartmak için de bu özelliğin değerini false yapın.

Tree view olayları (Events)

Aşağıda tree view denetimi tarafından desteklenen olayların listesi yer alıyor:

AfterLabelEdit
BeforeLabelEdit
Click
Collapse
DblClick
DragDrop
DragOver
Expand
GotFocus
KeyDown
KeyPress
KeyUp
LostFocus
MouseDown
MouseMove
MouseUp
NodeCheck
Nodeclick
CodeClick
OleCompleteDrag
OleDragDrop
OleDragOver
OleGiveFeedBack
OleSetData
OleStartDrag
Validate

afterlabeledit() olayı,bir düğüm üzerindeki etiket düzenleme işlemi yapılmasında sonra tetiklenir. bu olay düğümün isminin geçerli olduğundan emin olmak için denetlemek isterseniz
faydalı olur.tamamlayıcısı olan beforelabeledit() olatı ise düğüm düzenleme kipine geçmeden önce tetiklenir.
collapse()olayı kullanıcı ağacın bir dalını kapttığında tetiklenir.bu olay bir ağacın kökü çift tıklandığında ya da bu dalın kökünün yanındaki eksi işareti tıklandığında gerçekleşebilir.hafızadan tasarruf etmek isterseniz.tree view denetiminden öğeler silmek için gereken kodu bu olaya yerleştirebiliriz.
Expand()olayı collapse() olayının tam tersidir.kullanıcı bir dalın kökünün yanındakiartımişaretine tılıyarak veya bu dalın köükne çift tıklıyarak bir dalı açtığında tetiklenir.bu olay düğüm açılırken denetime verileri dinamik olarak yüklemek amacıyla kullana bilirsiniz.
Nodeclick()olayı tree view denetiminin sunduğu en önemli olaylardan biridir.bu olaı tıklanan düğüm hakkında bilgi almak yada uygulamanın gerektiği başka her hangi bir işlev için kullanabilirsiniz.örneğin aşağıdaki kod tıkladığınız düğümün komple yolunu gösteren bir iletişim kutusu görüntülenir:

private sub tvwnodes_nodecilick(byval node as comctlib.node)
msgbox node.fullpath
end sub

pathseparator özelliğinde bir ters bölü karakteri kullanırsınız.kök düğüm adı C: ve tıklanan düğüm adıda windows olduğunda bu iletişim kutusu C:\windows ifadesi görüntülenir.
olecompletedrag()olayı ole verileri bu denetim üzerine bırakıldığında veya ole sürükleme bırakma işlemi iptal edildiğinde tetiklenir.
oledragdrop()olayı oledropmode özelliğinin değeri 1-manual yapıldığında ve denetim üzerine ole verileri bırakıldığında tetiklenir.bu nolaya veriler bırakıldığında denetimin ne yapması gerektiğini belirliyecek kodu yerleştiririz.bu olaya denetimin verileri taşımasını sağlayacak kodu da yerleştirebilirsiniz,ama kopyalamak için kullanılacakbir kod yerleştirmelisiniz.ya da verileri kopyalamasını sağlayabilirsiniz,ancak bu durumda da taşıtamazsınız.bu işlev uygulamanızın gereksinimlerine bağlıdır.
oledragover()olayı ole verileri denetimin üzerine sürüklendiğinde tetiklenir.
olegivefeedback()olayı her oledragover() olayından sonra tetiklenir.bu olay tree view denetiminin kullanıcıya fare imlecinin kullanıcı nesneyi bıraktığı taktirde ne olacağını gösterecek şekilde değiştirmek veya neler olacağını göstermek için seçim üzerinde görsel bir geri besleme sunmak gibi bir geri besleme sunması sağlar.
olesetdata()olayı bir hedef denetim getdata yöntemini kaynak denetim dataobject nesnesi üzerinde çalıştırıldığında tetiklenir.
son olarakda olestartdrag()olayı kullancı verileri bu denetimden başladığında tetiklenir.

tree view yöntemleri (methods)

aşağıda tree view denetimi tarafından desteklenen yöntemler yer alıyor:
Drag
GetVisibleCount
HitTest
Move
OleDrag
Refresh
SetFocus
ShowWhatsThis
StartLabelEdit
Zorder

getvisiblecount yöntemi belirli bir anda tree view içinde görünebilen düğüm sayısını elde etmek için kullanılır.
hittest yöntemi belirli bir düğümün bırakma hedefi olarak kullanılıp kullanılmayacağını belirtmek için kullanılır.
oledrag yöntemi bir ole sürükleme işleminin başlatılması için çağrılır.
startlabeledit yöntemi,bir düğümü etiket düzenleme kipine geçirdiğimizde kullanılır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Eagle_Tim

çok güzel bir çalışma olmuş elinize sağlık keşke bunu doc olarak birde toplasaydınız. bende visual basic öğrenmeye çalışıyorum küçük çalışmalar yapıyorum ve böyle özellikle türkçe bilgiler pdf veya doc formatında toplanabilirse daha yararlı olur kanısındayım. indirip gerektiğinde incelemek amacıyla..
Software and Hardware Design...

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

3D Robot

Alıntı Yap"3D Robot. (visual basicde neler yapılabileceğini görün !)"


Arkadaşlar açık kaynak kodlu bi süredir elimde olan 3D robot similasyonunun 2. verisyonunu
buldum ve gerçekten bir kez daha şaşırdım..

2. versiyonda 12 çeşit robot var ve
6 adet fonksiyonla kontrol edebildiğiniz , kaplamalarını değiştirebildiğiniz,
similasyon yaptırabiliyorsunuz..


aşşağıda kod sahibinin hakkını yememek için orjinal linklerin veriyorum ama
orjinal linkinden indireceğiniz 2 .versionu indirdiğiniz haliyle çalışmıyor
o yüzden benim verdiğim upload edilmiş örnekleri indirin, çalışıyorlar..


ikisi birden download linki = çalışan hali

http://www.gizliarsiv.com/v/7273901/3d_robot.zip.html


ORJİNAL linkleri..

versiyon 1 için download linki
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=51247&lngWId=1

versiyon 2 için download linki
http://5axes.free.fr/devel_robot.htm ' çalışmıyor çalışması için


2. versiyonu çalıştırmak için klasör içindeki dat ve stl uzantısındaki tüm dosyları "Robot_def"
adlı bi klasöre taşımanız gerekmekte..
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

PC bir ağa bağlımı?

Kod: http://rapidshare.com/files/10048212/kod.zip.html

Alıntı Yap" eğer bir ağa bağlıysanı bir ağdaki ip niz birde internetteki ipniz vardır eğer ağda değilseniz ağ ip niz ile internetteki ip niz eşittir bizde bundan yaralanarak pc nin routerlı modem kullandığını yada ağa bağlı oldununu anlayabilirz
"


şimdi formumuza
bir buton
bir inet
bir winsock ekleyin
ve aşağıdaki kodu C/P yapın

Private Sub Command1_Click()
Dim strkur, icip, dısip, sonuc
strkur = Inet1.OpenURL("www.whatismyip.com")
dısip = Mid(strkur, InStr(strkur, "Your IP Is") + Len("Your IP Is") + 1, 14)
icip = Winsock1.LocalIP
If dısip = icip Then
sonuc = "Ağ ip si ile internetteki Ip aynı olduğu içIn Pc bir ağa bağlı değil ve routersız modem kullanıyor yada dial-up"
Else
sonuc = "Ağ ip si ile internetteki Ip aynı olmadığı içIn Pc bir ağa bağlı yada Routerlı modem kullanıyor"
MsgBox "İç IP= " & icip & " Dış IP= " & dısip & " Sonuç: " & sonuc
End If
End Sub

burda inet nesenesi ile www.whatismyip.com dan intenetteki ip mizi öğrenip winsocktan öğrendiği ip ile karşılaştırıoyro aynıysa bize bildiriyor
 

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Eagle_Tim

Software and Hardware Design...

OG

Alıntı Yapinternet explorer'in başlığında ki "Microsoft Internet Explorer" yazısını değiştirmek
forma 1 tane text,1 tane de buton koyun
aşağıdaki kodu kopyala yapıştır....



Private Sub Command1_Click()
Dim kayit As Object
Set kayit = CreateObject("wscript.shell")
kayit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\" & "Window Title", (Text1)
MsgBox "Internet Explorer Başlığı ( " & Text1 & " ) Olarak Değiştirildi", vbInformation, "H@s@nSoft - 2006"
End Sub

örnek  http://rapidshare.com/files/10056823/IE_degistir.exe.html
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

EN ÇOK KULLANILAN MODEM KOMTLARI

Alıntı Yap
‘ AT ' ; bu komutu modeme gönderdiğinizde ekrana ‘OK' çıkması gerekmektedir.Aksi halde modem – program – bilgisayar üçlüsü arasında bir iletişim bozukluğu var demektir.
AT < ENTER > şeklinde kullanılır ve modem komutlarından bazıları bu ‘AT' komutuna eklenerek kullanılmalıdır.

‘ A ' ; modemin telefon hattınızı açmasını ve bir cevap sinyali göndermesini sağlar . Modem başka bir modem tarafından arandığında bağlantıyı kurmak için , telefon çalarken bu komutun verilmesi gerekir.
ATA < ENTER > şeklinde kullanılır.

‘ A/ ' ; modeme verdiğiniz son komutu tekrar eder.Sürekli kullanılan bir komut yada devamlı aranan bir telefon numarası olabilir , zamandan tasarruf etmek için bu komut kullanılır.
A/ < ENTER > şeklinde kullanılır.

‘ %C ' ; iletilen bilgilerin sıkıştırılmasını sağlar.Daha önce sıkıştırılmamış dosyaların transfer zamanlarını en aza indirir.Daha önce sıkıştırılmış dosyalar için kullanılırsa , transfer zamanında azalma beklerken tam tersi ile karşılaşabilirsiniz.Bu komut , ‘ N ' komutunun aldığı değerlerden etkilenmektedir.Bu seçenekler ;
0 = bilgi sıkıştırma aktif
1 = bilgi sıkıştırma pasif
AT%C [ seçenek ] < ENTER > şeklinde kullanılır.

‘ &C ' ; bağlantı durumunun belirtilmesinde kullanılır . Bazı iletişim yazılımları , modem bağlantı kurmadan önce bağlantı durumunun açık olmasını isterler. Gelişmiş iletişim yazılımları ise , bu opsiyonu bağlantı kurulduğunda açarak , kullanıcıya haber verir.Seçenekler ;
0 = bağlantı durumu her zaman açık
1 = sadece bağlantı kurulduğunda açık
AT&C < ENTER > şeklinde kullanılır.

‘ D ' ; telefon numarası çevirmek için kullanılır.Modem kullanımı , telefon hattı üzerinden telefon numarası çevrilerek , başka modemleri arama şeklinde gerçekleşir.Seçenekler ;
P— çevirmeli telefon modu
T— ton sesli telefon modu
R— aradıktan sonra cevap ver modu
W – ikinci bir çevir sinyali bekle
S – hafızadaki numarayı çevir
,  numara çevirirken bekleme yap
;  komut moduna geri dön
/  0.125 sn bekle
ATD [ seçenek ] [ seçenek ] [ telefon numarası ] < ENTER > şeklinde kullanılır.



‘ &D ' ; modemin DTR sinyalini kontrol eder ve bu sinyalin değişiminde modemin ne yapacağını belirler.Modem , DTR seçeneğini devamlı açık tutacak şekilde programlanabilir.Bir çok iletişim yazılımı , modemlerin hattı kapatmaları için bu komutu kullanır.( %D2 ) Seçenekler;
0 = DTR her zaman açık
1 = DTR kapandığı zaman modem komut moduna geçer , otomatik cevap verme kapalıdır.
2 = DTR kapandığı zaman modem telefon hattını kapatır., komut moduna geçer ve otomatik cevap verme kapalıdır.
3 = 2 ile aynı , fakat en sonunda modemin kendini sıfırlamasını sağlar( ATZ )
AT&D < ENTER > şeklinde kullanılır.

‘ E ' ;terminal programından modeme gönderilen bilgileri geriye terminale göndermeyi sağlar.Bazı terminal programları yazdıklarınızı ekranda göstermeyebilir.O zaman bu fonksiyonunuzu açık tutulmalıdır.Seçenekler ;
0 = fonksiyon kapalı
1 = fonksiyon açık
ATE [ seçenek ] < ENTER > şeklinde kullanılır.

‘ &F ' ; bu komut modemin tüm ayarlarını fabrika ayarlarına döndürür.Bazı durumlarda modem ayarları ile oynanmış olabilir, o zaman en başa dönebilmek için bu komut kullanılmalıdır.
AT&F < ENTER > şeklinde kullanılır.

‘ &G ' ; koruyucu ton ayarlamasını yapar.Ülkeler arası ayarlamalarda kullanımı gerekli olabilir.İngiltere ile yapılan görüşmelerde 1800 Hz' lik bir koruyucu ton sesi gerekmektedir.Bazı Avrupa ülkelerinde ise bu değer 550 Hz olmaktadır.ABD , Kanada ve Türkiye' de koruyucu ton uygulaması yoktur.Seçenekler ,
0 = kapalı
1 = 550 Hz
2 = 1800 Hz
AT&G <ENTER > şeklide kullanılır.

‘ G ' ; akış kontrolü ( XON / XOFF ) seçimi yapar.v.42 ve MNP kullanılmayan durumlarda modem ile bilgisayar arasında bir akış protokolü kullanmak , bilgi kaybını önlemek açısından yararlı olur.v.42 ve MNP kendi akış kontrol metotlarını kullandıkları için böyle bir durum söz konusu olduğu zaman bu komut dikkate alınmaz.Seçenekler ;
0 = kapalı
1 = açık
AT G [ seçenek ]< ENTER > şeklinde kullanılır.

‘ H ' ; modemin telefonu açıp kapatma görevini yapar.Bağlantıyı sona erdirmek için ( bağlantı halinde iken ) ya da telefonu meşgul durumuna almak için ( bağlantı halinde değilken ) kullanılır.Seçenekler ;
0 = bağlantıyı sona erdir.
1 = telefonu meşgul durumuna al
ATH [ seçenek ] <ENTER > şeklinde kullanılır.





‘ I ' ; modemin hızını ( bps ) , ROM değerini ve kayıt numarasını gösterir.Seçenekler;
0 = hızını gösterir
1 (3) = ROM testini yapar
4 (6) = ürün kayıt numarasını gösterir
ATI [ seçenek ] <ENTER > şeklinde kullanılır.

‘ Z ' ; o ana kadar ki tüm değerleri sıfırlar ve başlangıç değerine döndürür.
ATZ <ENTER > şeklinde kullanılır.

‘ L ' ; modemin sesini ayarlar.Seçenekler ;
0 = en düşük
3 = en yüksek
ATL [ seçenek ] < ENTER > şeklinde kullanılır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Çalistigi makinanin mac adresini görüntüler

Alıntı Yap
'boş bir forma text1 adında geniş bir textbox ve
'CmdClose adında bir buton koyun
Option Explicit
Private Const NCBASTAT = &H33
Private Const NCBNAMSZ = 16
Private Const HEAP_ZERO_MEMORY = &H8
Private Const HEAP_GENERATE_EXCEPTIONS = &H4
Private Const NCBRESET = &H32

Private Type NCB
 ncb_command As Byte
 ncb_retcode As Byte
 ncb_lsn As Byte
 ncb_num As Byte
 ncb_buffer As Long
 ncb_length As Integer
 ncb_callname As String * NCBNAMSZ
 ncb_name As String * NCBNAMSZ
 ncb_rto As Byte
 ncb_sto As Byte
 ncb_post As Long
 ncb_lana_num As Byte
 ncb_cmd_cplt As Byte
 ncb_reserve(9) As Byte ' Reserved, must be 0
 ncb_event As Long
End Type

Private Type ADAPTER_STATUS
 adapter_address(5) As Byte
 rev_major As Byte
 reserved0 As Byte
 adapter_type As Byte
 rev_minor As Byte
 duration As Integer
 frmr_recv As Integer
 frmr_xmit As Integer
 iframe_recv_err As Integer
 xmit_aborts As Integer
 xmit_success As Long
 recv_success As Long
 iframe_xmit_err As Integer
 recv_buff_unavail As Integer
 t1_timeouts As Integer
 ti_timeouts As Integer
 Reserved1 As Long
 free_ncbs As Integer
 max_cfg_ncbs As Integer
 max_ncbs As Integer
 xmit_buf_unavail As Integer
 max_dgram_size As Integer
 pending_sess As Integer
 max_cfg_sess As Integer
 max_sess As Integer
 max_sess_pkt_size As Integer
 name_count As Integer
End Type

Private Type NAME_BUFFER
 name As String * NCBNAMSZ
 name_num As Integer
 name_flags As Integer
End Type

Private Type ASTAT
 adapt As ADAPTER_STATUS
 NameBuff(30) As NAME_BUFFER
End Type

Private Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
Private Declare Function GetProcessHeap Lib "kernel32" () As Long
Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long

Private Function EthernetAddress(LanaNumber As Long) As String
 Dim udtNCB       As NCB
 Dim bytResponse  As Byte
 Dim udtASTAT     As ASTAT
 Dim udtTempASTAT As ASTAT
 Dim lngASTAT     As Long
 Dim strOut       As String
 Dim X            As Integer

 udtNCB.ncb_command = NCBRESET
 bytResponse = Netbios(udtNCB)
 udtNCB.ncb_command = NCBASTAT
 udtNCB.ncb_lana_num = LanaNumber
 udtNCB.ncb_callname = "* "
 udtNCB.ncb_length = Len(udtASTAT)
 lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
 strOut = ""
 If lngASTAT Then
   udtNCB.ncb_buffer = lngASTAT
   bytResponse = Netbios(udtNCB)
   CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
    With udtASTAT.adapt
     For X = 0 To 5
       strOut = strOut & Right$("00" & Hex$(.adapter_address(X)), 2)
     Next X
   End With
   HeapFree GetProcessHeap(), 0, lngASTAT
 End If
 EthernetAddress = strOut
End Function


Private Sub CmdClose_Click()
Unload frmEthernetAddress
End Sub

Private Sub Form_Load()

 Text1 = "This machine is Ethernet Address: " & EthernetAddress(0)

End Sub


FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.