Translate

Wednesday, April 10, 2013

dari VB ke DELPHI..


Delphi 2 - Moving From VB to Delphi

Abstract: This document is designed to facilitate an understanding of Delphi 2.0 among those with existing knowledge in Visual Basic 4.0.
Moving From VB to Delphi: Command Reference
 General Controls
 Forms
 Command Buttons
 TextBoxes
 ListBoxes
 PictureBoxes/Images
 File Controls
 Menus
 ActiveX
 Component Palette
General Controls
There are several component types in Delphi which can be used in the design environment. You will notice when you place a component on a form that the class name for the component (which shows up in the Object Inspector) begins with a "T" for "type." This is a convention that is used in Object Pascal frequently. Therefore, the class name of the button control isTButton, an edit control TEdit and so on. The time it is most important to know this is when you are trying to get help on a component by searching for it by name.
The following table is a list of Visual Basic controls and the corresponding components found in Delphi:

This VB controlcorresponds to this Delphi componentfound on this page of the Delphi component palette
ImageTimageAdditional
LabelTlabelStandard
TextBoxTeditStandard
FrameTGroupBoxStandard
CommandButtonTbuttonStandard
CheckBoxTCheckBoxStandard
OptionButtonTRadioButtonStandard
ComboBoxTComboBoxStandard
ListBoxTListBoxStandard
HScrollBarTScrollBarStandard
VScrollBarTScrollBarStandard
TimerTtimerSystem
DriveListBoxTDriveComboBoxSystem
DirListBoxTDirectoryListBoxSystem
FileListBoxTFileListBoxSystem
ShapeTshapeAdditional
OleControlTOleContainerSystem
GridTStringGridAdditional
CommonDialogTOpenDialogDialog
TSaveDialogDialog
TFontDialogDialog
TColorDialogDialog
TPrintDialogDialog
TPrinterSetupDialogDialog
TFindDialogDialog
TReplaceDialogDialog
GaugeTgaugeSamples
GraphTchartOCX
MMControlTMediaPlayerAdditional
MaskEdBoxTMaskEditAdditional
OutlineToutlineAdditional
SpinButtonTSpinButtonSamples
SSCommandTBitBtnAdditional
In addition, there are several controls included with Delphi that you would need to purchase separately with Visual Basic: the SpeedButton, TabSet, Notebook, Header, Scrollbox, TabbedNotebook and Calendar, and Grid components.
What follows is a discussion of the more prominent control types and how they compare to their VB equivalents.

Forms
Forms in Delphi are very similar in function and operation to forms in Visual Basic. They both act as the center of an application and as containers for controls. The following is a list of form properties in VB and their equivalents in Delphi:

Visual BasicDelphi
ActiveControlActiveControl
ActiveFormActiveMDIChild
BackColorColor
BorderStyleBorderStyle
CaptionCaption
EnabledEnabled
FontBoldFont.Style
FontItalicFont.Style
FontNameFont.Name
FontSizeFont.Size
FontStrikThruFont.Style
FontUnderlineFont.Style
ForeColorFont.Color
HDCCanvas
HeightHeight
HelpContextIDHelpContext
HwndHandle
IconIcon
KeyPreviewKeyPreview
LeftLeft
MDIChildFormStyle
MousePointerCursor
NameName
PicturePicture
ScaleHeightClientHeight
ScaleWidthClientWidth
TagTag
TopTop
VisibleVisible
WidthWidth
WindowStateWindowState
Where there isn't a direct property relationship, there is alternative functionality such as in the case of DDE and scaling. In addition, there are several methods that the forms have in common, as the following table shows:

Visual BasicDelphi
CircleCancas.Elipse, Canvas.Arc
HideHide
LineCanvas.LineTo
MoveSetBounds
Point
PrintFormPrint
PrintCanvas.TextOut
RefreshRefresh
SetFocusSetFocus
ShowShow
TextHeightCanvas.TextHeight
TextWidthCanvas.TextWidth
ZorderBringToFront, SendToBack
(Load)Create
(Unload)Destroy
As you can see, there is a property of a form which is its canvas. It is on the canvas that you do your drawing. As you will see below, there is a canvas associated with every object in Delphi on which you are able to draw.
Finally, there is more overlap in the events available from a Delphi form and those available in VB.

Visual BasicDelphi
ActivateOnActivate
ClickOnClick
DblClickOnDblClick
DeactivateOnDeactivate
DragDropOnDragDrop
DragOverOnDragOver
GotFocusOnGotFocus
KeyDownOnKeyDown
KeyPressOnKeyPress
KeyUpOnKeyUp
LoadOnCreate
LostFocusOnLostFocus
MouseDownOnMouseDown
MouseMoveOnMouseMove
MouseUpOnMouseUp
PaintOnPaint
QueryUnloadOnQueryClose
ResizeOnResize
UnloadOnDestroy
The equivalent of Me is Self in Delphi. You can access the object that triggered an event at any point by using the Sender parameter. To act on the form, you would use the syntax:
TForm(Self).Caption := 'Hello World!';
Because ObjectPascal is such a strongly typed language, you need to cast a generic object variable to a specific type. In the example above, this is done by using the type as if it's a function call—for example,TForm(Self). This allows access to all of the methods and properties of that object.

Command Buttons
The TButton component in Delphi is the equivalent of the CommandButton control type in VB. It is nearly identical in operation to the CommandButton. The CommandButton properties (which are not shared with a form) are below:

Visual BasicDelphi
CancelCancel
DefaultDefault
DragIconDragCursor
DragModeDragMode
ParentParent
TabIndexTabOrder
TabStopTabStop
The only new method for the CommandButton is the Drag method which has an equivalent in the BeginDrag method of the TButtoncomponent. All of the events of the CommandButton are covered in the table for the form object.

TextBoxes
The equivalent of the VB TextBox in Delphi is the TEdit component. As with the button objects, the TextBox and TEdit have most properties and methods in common. The really significant difference is that in Delphi there are two controls which correspond to the TextBox in VB: the TEdit and the TMemo components. Here are the equivalent properties of the TextBox, as reflected in Delphi's TEdit and TMemocomponents:

Visual BasicDelphi
AlignmentAlignment (TMemo)
HideSelectionHideSelection
MaxLengthMaxLength
PasswordCharPasswordChar
ScrollbarsScrollbars (TMemo)
SelLengthSelLength
SelStartSelStart
SelTextSelText
TextText
Lines(Tmemo)
The Lines property of the TMemo component is similar to the List property of a Listbox and allows line by line access to the contents of the control. This property is a TStringList object which exists in several places in Delphi and is discussed in conjunction with theListBox component. There are no new methods in the TextBox and the new event, OnChange, is one the TextBox has in common with theTEdit component.
The Font.Style property is an Object Pascal "set" which is a bit flag variable but with a cleaner syntax than is available in Visual Basic. For example, the code behind the chkBold checkbox looks like this:
procedure TForm1.chkBoldClick(Sender: TObject);

begin

  if TCheckBox(Sender).State = cbChecked then

    txtDisplay.Font.Style := txtDisplay.Font.Style + [fsBold]

  else

    txtDisplay.Font.Style := txtDisplay.Font.Style - [fsBold];

end;
Simply by adding the appropriate constant in brackets, you add that attribute to the style and you remove it by subtracting it.

ListBoxes
Once again, the TListBox component in Delphi is very similar to the ListBox control in Visual Basic. Here are the properties of a ListBox:

Visual BasicDelphi
ColumnsColumns
ItemDataItems.Objects*
ListItems
ListCountItems.Count
ListIndexItemIndex
MultiSelectMultiSelect*
NewIndex(Items.Add)
SelectedSelected*
SortedSorted
TopIndexTopIndex
*Not a direct equivalent
The primary methods a little different because they are the methods of the Items collection but the methods for the ListBox are as follows:

Visual BasicDelphi
AddItemItems.Add
Items.Insert
ClearClear
RemoveItemItems.Delete
The contents of a ListBox are in the Items property, which is much like the List property in VB except it is more than an array; it is also a class of type TStringList. This object has many interesting features but fundamentally, manipulation of the list takes place via methods of theItems property.
A VB example of Listbox functionality can be found in the LISTBOX.FRM example in the SAMPLESCONTROLSCONTROLS.MAK sample Visual Basic project. This is a good demonstration of the differences in using the TListbox and the VB ListBox. In the VB sample, the Add button executes the following code:
Sub cmdAdd_Click ()

    lstClient.AddItem txtName.Text

    txtName.Text = ""

    txtName.SetFocus

    lblDisplay.Caption = Str(lstClient.ListCount)

End Sub
The equivalent code in Delphi looks something like this:
procedure TfrmListBox.cmdAddClick(Sender: TObject);

begin

     lstClient.Items.Add (txtName.Text);

     txtName.Text := '';

     txtName.SetFocus;

     lblDisplay.Caption := IntToStr (lstClient.Items.Count);

end;
The first thing you should notice is that the Add method is on theItems property, not the listbox itself. A brief aside is that you must surround the parameters of both subroutines and functions in parentheses, unlike in Visual Basic where subroutines (and methods) don't use parentheses. Second, you should see that the use of variants is not recommended in Delphi any more than it is in VB. This means that you need to explicitly convert data types for assignment. Therefore, in order to display the Items.Count property in the labellblDisplay, use the IntToStr function which is similar in functionality to STR in VB.
The code behind the VB Remove button looks like this:
lstClient.RemoveItem lstClient.ListIndex
while the equivalent Delphi code looks like this:
lstClient.Items.Delete(lstClient.ItemIndex);
where again the Delete method is supported by the Items property. In both VB and Delphi, the Clear method is a method of the listbox object itself so the code looks identical except for the semicolon on the end of the line of Delphi code.
A major advantage of the TStringList property type is that it is compatible with lots of other properties so the following represent working statements in Delphi:
ListBox1.Items := Memo1.Lines;

ListBox2.Items := Screen.Fonts;

ListBox3.Items.LoadFromFile('mylist.txt');

PictureBoxes/Images
The TImage component of Delphi is equivalent to the Image control in Visual Basic except that it has the equivalent drawing functionality of a PictureBox, thereby allowing it to serve the same purpose as both controls in VB. It is a lightweight control just like the Image control and shares a number of properties in common with the Image and the PictureBox. The core display property is the Picture property which operates in much the same way in both environments.
An example of pictureboxes in VB is the SAMPLESFIRSTAPPBUTTERF.MAK demo shipped with Visual Basic. The timer code in Visual Basic looks like this:
Sub Timer1_Timer ()

     Static PickBmp As Integer

     Main.Move (Main.Left + 20) Mod ScaleWidth,_

               (Main.Top - 5 + ScaleHeight) Mod ScaleHeight

     If PickBmp Then

        Main.Picture = OpenWings.Picture

     Else

        Main.Picture = CloseWings.Picture

     End If

     PickBmp = Not PickBmp

End Sub
whereas the equivalent code in Delphi looks pretty much the same:
procedure TForm1.Timer1Timer(Sender: TObject);

const

     PickBmp:Boolean = False;

begin

     Main.SetBounds ((Main.Left + 20) Mod ClientWidth,

                     (Main.Top - 5 + ClientHeight) Mod

                      ClientHeight,Main.Width,Main.Height);

     if PickBmp = True then

         Main.Picture := OpenWings.Picture

     else

         Main.Picture := CloseWings.Picture;

     PickBmp := Not PickBmp;

end;
There are a couple of differences worth noting. First, the SetBoundsmethod, unlike the Move method in VB has no optional parameters so you need to supply the Width and Height values. Second, there is no so-called static variable type in Delphi. Instead you may use a typed consant in its place. The point is that the assignment to the Pictureproperty works just like it does in VB.
Another key difference is that instead of a LoadPicture function that returns a picture, the Picture property of a TImage has its ownLoadFromFile method as demonstrated in the next section.

File Controls
Just as in Visual Basic, there are a set of file-oriented components in Delphi for the construction of browsers and customized file dialogs. These components are the TDirectoryListBox, TFileListBox, TDriveComboBox and TFilterComboBox. There is no equivalent to the FilterComboBox in VB but you have seen similar functionality in theFilter property of the common dialog control.
The TDriveComboBox is the counterpart to the DriveListBox in VB. The relevant property in both is the Drive property. The primary difference is that the DirectoryListBox in Delphi also has a Drive property for direct assignment from the DriveComboBox. Therefore, in place of the code
Sub Drive1_Change ()

    Dir1.Path = Drive1.Drive

End Sub
in Visual Basic, the Delphi equivalent is:
procedure TForm1.Drive1Change(Sender: TObject);

begin

     Dir1.Drive := Drive1.Drive;

end;
The TDirectoryListBox and DirListBox are the Delphi and Visual Basic components to represent a directory. Both display a similar hierarchical structure. The core property of the TDirectoryListBox is Directory which is the equivalent of the Path property in VB's DirListBox. So the following code in VB:
Sub Dir1_Change ()

    file1.Path = Dir1.Path

End Sub
translates to the following in Delphi:
procedure TForm1.Dir1Change(Sender: TObject);

begin

     File1.Directory := Dir1.Directory;

end;
Certainly, you can see that the operation of these controls is very similar in Visual Basic and Delphi. Most of the differences you encounter are subtle changes to the object design.
Finally, there comes the TFileListBox control which is the counterpart to the FileListBox in Visual Basic. Again, the operation of these controls is similar but there are enough differences that they bear closer scrutiny. Here are the relevant properties of each:

Visual BasicDelphi
ArchiveFileType
FileNameFileName
HiddenFileType
NormalFileType
PathDirectory
PatternMask
ReadOnlyFileType
SystemFileType
As you can see, the biggest difference between the two controls is the selection of file types to display. In VB, this is a set of Boolean properties whereas in Delphi it is a set property type like the Styleproperty of a TFont object. In the Object Inspector, you simply double-click on FileType to expand the component choices. In addition to the choices in VB, there is also the ability in the TFileList to include the directories and volume id. To change these values programmatically, you simply add or subtract the constants from the property. In other words:
File1.FileType := File1.FileType + [fsDirectory] - [fsHidden];

File1.FileType := File1.FileType + [fsNormal] + [fsSystem];
would be valid operations with the FileType property. If you want to check membership in a set, you simply use the in operator. For example,
if fsHidden in File1.FileType then ...
is the code you would use to test whether the TFileListBox was displaying hidden files.
The operation of the two file lists is similar so that the following code from PICVIEW.MAK:
Sub File1_DblClick ()

' When at the root level (for example, C:) the Path property

' has a backslash () at the end.  When at any other level,

' there is no final .  This code handles either case to build

' the complete path and filename of the selected file.

      If Right(file1.Path, 1) <> "" Then

        label1.Caption = file1.Path & "" & file1.FileName

      Else

        label1.Caption = file1.Path & file1.FileName

      End If

' Load the selected picture file.

      Form1.open.Picture = LoadPicture(label1.Caption)

End Sub
would look like this in Delphi:
procedure TForm1.File1DblClick(Sender: TObject);

begin

     if Length(File1.Directory) = 3 then

         Form1.Caption := File1.Directory + File1.FileName

     else

         Form1.Caption := File1.Directory + '' + File1.FileName;

     Image1.Picture.LoadFromFile (Form1.Caption);

end;
The only difference here is the result of no Right function in Delphi. You could code it with Copy command in Delphi (which is like MID, see string handling below) but it was just as simple to check the length instead.

Menus
Menus are handled a little differently in Delphi than in VB and allow for much greater flexibility. However, the common functionality between them is fairly straightforward.
To create a menu for a form in Delphi, place a TMainMenu component on the form. By default, this is the first control in the Standard page of the Component palette. This component encapsulates all the functionality of the menu. To get to the Menu Designer, simply double-click the main menu component. The Delphi Menu Designer looks very much like a menu. When it first appears, there is one blank menu item. Simply type in a caption. You will notice that the Object Inspector will record what you type in the Caption property and, when you press Enter, will use the menu caption to generate a default name for this menu item.
Once you press Enter, you can start typing the caption of the first item in this menu and so on. When a particular menu item is selected, it appears in the Object Inspector. Menu items in Delphi have similar properties to menu items in Visual Basic.

Visual BasicDelphi
CaptionCaption
CheckedChecked
EnabledEnabled
ShortCutShortCut
TagTag
Menu items are used the same way for the most part. An "&" in the caption creates an accelerator. Using a hyphen "-" as the caption creates a separator bar in the menu.
Unlike in the menu designer in VB, you are directly manipulating menu items. Therefore, to move a menu item, you can simply drag it from one place in the menu to another, including to another menu. For example, you can drag an item from the File menu to the Edit menu. To create a sub-menu, right-click a menu item and choose Create Sub-menu or use Ctrl-Right Arrow to create it directly.
To associate code with a menu item, simply double-click the item in the menu designer to get to the OnClick event of the menu item. Bear in mind that the only way to see these menu items is to open the Menu Designer by double-clicking on the TMainMenu component.
This section doesn't really do justice to the menu functionality of Delphi. Be sure to read the documentation on merging menus and on creating them dynamically. While there are no control arrays as such in Delphi, the ability to dynamically create objects provides even more flexibility and power. A method of emulating control arrays is discussed below.

ActiveX Control Support
Delphi provides robust support for ActiveX Controls (OCX). However, support for data binding, specific to Visual Basic is not supported at this time. This is proprietary to Visual Basic and deviates from the generic OCX specification.
To add a OCX control to the component library,
  1. Open the Install Components dialog box.
  2. Choose OCX to open the Install OCX File dialog box.
  3. Navigate until you locate the .OCX file you want to add, then choose OK.
  4. Once you have added all the OCX controls and other modules you want, choose OK to close the Install Components dialog box and rebuild the component library.
Delphi will then build a wrapper VCL component around the OCX control, thereby integrating it into the Delphi environment. The OCX isnot directly linked into your application in any way. Instead it remains as a separate and shareable resource. As such it is important to remember that whatever license file was required to use it in Visual Basic will continue to be required to use it in the Delphi development environment. Note that some OCX controls will only operate properly if they are registered. Make sure your setup procedure registers any OCXs you'll be using as this is not automatic.

The Component Palette
Now is a good time to mention the differences in the component palette and the toolbox in Visual Basic. In Visual Basic, you define a set of custom controls to be associated with a particular project. By contrast in Delphi, custom components become part of the development environment itself when installed. Of course, in the case of OCXs, this is only a wrapper but the OCX remains "installed", if not loaded into memory beyond the current project.
This is a sensible and beneficial approach, because the overhead associated with Delphi components is much less than that of OCXs in VB. In Visual Basic, each OCX is a separate dynamic-link library (though it may contain multiple controls) and as such consumes memory and resources. Therefore, in VB it is very important to limit the number of OCXs you keep loaded during development, because you will quite literally run out of resources.
By contrast, there are three reasons this situation is far better and more efficient in Delphi. First, components are typically smaller because they are all inherited from other components you already have installed. For example, the TFileList component is based on theTListbox component which is already loaded. Second, the code behind each component is compiled down to native code when installed in the IDE. For example, the DLL containing all of the standard controls is just over 1 Mb in size. Third, all of the installed components are added to a single dynamic-link library for greater memory and resource efficiency.
That said, it is possible to control which custom components are loaded at a particular point by changing the dynamic-link library currently installed in the IDE. At any point, you can make a copy of the current COMPLIB.DCL under a new name. You can then load that library at some future point. Bear in mind that, like in Visual Basic, it is essential you have all of the required controls installed into the IDE when using a project that requires them. This is not the case with distribution of your completed applications, as Delphi Visual Component Library (VCL) components are linked directly into your EXE file.