Halaman

Tampilkan postingan dengan label delphi. Tampilkan semua postingan
Tampilkan postingan dengan label delphi. Tampilkan semua postingan

Rabu, 26 Oktober 2011

Delphi : Working with path, file name, directory

From time to time, you would need file manipulations integrated with your software(s), and you usually needs the library for working with your directory, these are couples of directory routines which is very much usefull

  1. ExtractFilePath : this will returns the directory for a file, including a backslash("\" ~ Env. Windows) 
  2. ExpandFileName: Example : "c:\program files\yohan\is\cool\..\.." will returns "c:\program files\yohan\"
Two very handy functions! :)

Selasa, 11 Oktober 2011

Sabtu, 24 September 2011

Delphi : Load png to TBitmap

HI there good friends, for those of you who would like to get load a jpeg image and then load the data to a TBitmap object, here is a neat good trick to get it done :

procedure TForm1.btn1Click(Sender: TObject);
var
	bmp : TBitmap;
begin
    if(dlgOpenPic1.Execute()) then
    begin
        img1.Picture.LoadFromFile(dlgOpenPic1.FileName);

        bmp := TBitmap.Create;
        try
            bmp.Width := img1.Picture.Width;
            bmp.Height := img1.Picture.Height;

            bmp.Canvas.Draw(0, 0, img1.Picture.Graphic);

            Canvas.Draw(btn1.Left, btn1.Top + btn1.Height + 20, bmp);
        finally
            bmp.Free;
        end;
    end;
end;
Just dont forget to include the jpeg unit if you want to work with the jpegs, and for delphi 2009 and up you could add the PNGImage to work with png files on your delphi project

Have fun dear friends! ;)

Kamis, 25 Agustus 2011

Delphi : Variable Parameters, Packed Records

Variable Parameters
taken from www.chami.com
//
// FunctionWithVarArgs()
//
// skeleton for a function that
// can accept vairable number of
// multi-type variables
//
// here are some examples on how
// to call this function:
//
// FunctionWithVarArgs(
//   [ 1, True, 3, '5', '0' ] );
//
// FunctionWithVarArgs(
//   [ 'one', 5 ] );
//
// FunctionWithVarArgs( [] );
//
procedure FunctionWithVarArgs(
  const ArgsList : array of const );
var
  ArgsListTyped :
    array[0..$FFF0 div SizeOf(TVarRec)]
      of TVarRec absolute ArgsList;
  n         : integer;
begin
  for n := Low( ArgsList ) to
           High( ArgsList ) do
  begin
    with ArgsListTyped[ n ] do
    begin
      case VType of
        vtInteger   : begin
          {handle VInteger here}      end;
        vtBoolean   : begin
          {handle VBoolean here}      end;
        vtChar      : begin
          {handle VChar here}         end;
        vtExtended  : begin
          {handle VExtended here}     end;
        vtString    : begin
          {handle VString here}       end;
        vtPointer   : begin
          {handle VPointer here}      end;
        vtPChar     : begin
          {handle VPChar here}        end;
        vtObject    : begin
          {handle VObject here}       end;
        vtClass     : begin
          {handle VClass here}        end;
        vtWideChar  : begin
          {handle VWideChar here}     end;
        vtPWideChar : begin
          {handle VPWideChar here}    end;
        vtAnsiString: begin
          {handle VAnsiString here}   end;
        vtCurrency  : begin
          {handle VCurrency here}     end;
        vtVariant   : begin
          {handle VVariant here}      end;
        else          begin
          {handle unknown type here} end;
      end;
    end;
  end;
end;
Packed Records
Packed records is a way to align Delphi records. Delphi variables usually aligned at 2, 4, or 8 byte to optimize access, to make things clear, take a look at following code (taken from delphibasic.co.uk)
type
  // Declare an unpacked record
  TDefaultRecord = Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

  // Declare a packed record
  TPackedRecord = Packed Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

var
  defaultRec : TDefaultRecord;
  packedRec  : TPackedRecord;

begin
  ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec)));
  ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
end;
there is more advanced usage for the record type of delphi, such as this one :
type 
   TRect = packed record
     case Integer of
       0: (Left, Top, Right, Bottom: Integer);
       1: (TopLeft, BottomRight: TPoint);
   end; 
TRect.TopLeft will map to the TRect.Left and TRect.Top, TRect.BottomRight will map to the TRect.Right and TRect.Bottom, anoher usage would be like this one :
type
   // Declare a fruit record using case to choose the
   // diameter of a round fruit, or length and height ohterwise.
   TFruit = Record
     name : string[20];
     Case isRound : Boolean of // Choose how to map the next section
       True  :
         (diameter : Single);  // Maps to same storage as length
       False :
         (length   : Single;   // Maps to same storage as diameter
          width    : Single);
   end;
when isRound is true, you could define 1 more variable, and that is the diameter:Single, and if isRound is false, you could define 2 more variable, that is length, and width

Selasa, 16 Agustus 2011

Delphi : Dynamic object creation, Class Reference

A quick note for those delphi developer needs to use the dynamic object creation :
using the class reference is the good way to do it :)

a simple example :
procedure TForm1.Button1Click(Sender: TObject);
type
  CRForm = class of TForm;
var
  a: array[0..2] of CRForm;
  c: TForm;
begin
  a[0] := TForm2;
  a[1] := TForm3;
  a[2] := TForm4;

  c := TForm(a[2].Create(self));

  c.ShowModal;

  c.Free;
end;           
welcome to the power! :)
hope you could utilize this technique on your next application development adventure!

Selasa, 09 Agustus 2011

Delphi XE : Out of memory

A great solution found by Giedrius Bauza
HKEY_CURRENT_USER – SOFTWARE – MICROSOFT – WINDOWS – INTERNET SETTINGS – ZONES
if you find Letter not Numbers, delete the Letter one.

Cheers! :)

Thank you mr. Bauza.

Rabu, 03 Agustus 2011

Delphi : Samples

Leverage your delphi skills by utilizing samples, read it, earn it, and sleep with it :D
http://www.torry.net/pages.php?id=352

regards everybody

Kamis, 28 Juli 2011

Delphi : Static variable

Static variable on a class :
type
  TMyClass = class(TObject)
  public
    class var X: Integer;
  end;

Selasa, 26 Juli 2011

Delphi : Invalid Pointer Operation

owhh my!! what a...
what is this invalid pointer operation, where could i trace the source of the bug??

:D

Do not mend my friend for there is a will there is a way..

first you will need this wonderful project :
http://sourceforge.net/projects/fastmm/
  1. Do not forget to set the "FASTMM4Options.inc" on your directory of units and looks for the line that says FullDebugMode
  2. Go to your project options : set linker map to "Detailed"
  3. Include the "FastMM_FullDebugMode.dll" to where your binary is executed
now.. when there is memory leaks detected, you will get a full detailed causes and stacks trace

Woow....
just Wow.. 
:)

Productivity : Using bookmark on CodeGear

You can mark a location in your code with a bookmark and jump directly to it from anywhere in the file. You can set up to ten bookmarks. Bookmarks are preserved when you save the file and available when you reopen the file in the Code Editor.

  1. To set a bookmark
    In the Code Editor, right-click the line of code where you want to set a bookmark. The Code Editor context menu is displayed.
    Choose Toggle BookmarksBookmark n, where n is a number from 0 to 9. A bookmark icon  is displayed in the left gutter of the Code Editor.
    Tip: To set a bookmark using the shortcut keys, press CTRL+SHIFT and a number from 0 to 9.

  2. To jump to a bookmark
    In the Code Editor, right-click to display the context menu.
    Choose GoTo BookmarksBookmark n, where n is a number from 0 to 9.
    Tip: To jump to a bookmark using the shortcut keys, press CTRL and the number of the bookmark. For example, CTRL+1 will jump you to the line of code set at bookmark 1.

  3. To remove a bookmark
    In the Code Editor, right-click to display the context menu.
    Choose Toggle BookmarksBookmark n, where n is the number of the bookmark you want to remove. The bookmark icon is removed from the left gutter of theCode Editor.
Tip: To remove all bookmarks from a file, choose Clear Bookmarks


Reference : Embarcadero

Minggu, 24 Juli 2011

Delphi : How to rotate bits?

Rotating bits using delphi is not directly supported
here is a function i found searching the internet to rotate the bits :
function JHROR32(Value : dword ; N : integer) : dword ;
begin
  Result := (Value shr N) + (Value shl (32-N));
end;

function JHROL32(Value : dword ; N : integer) : dword ;
begin
  Result := (Value shl N) + (Value shr (32-N));
end;
Hope you find it usefully! ;)

Source : http://www.merlyn.demon.co.uk/del-bits.htm

C++ and Delphi bitwise operator

Converting Eh?
Operator name Syntax in C
Bitwise NOT ~a Yes
Bitwise AND a & b Yes
Bitwise OR a | b Yes
Bitwise XOR a ^ b Yes
Bitwise left shift a << b Yes
Bitwise right shift a >> b Yes
Hmm.. not a pretty sight :D
but there it is :
note : delphi shifting : "shl" and "shr"

Delphi Variable sizes

Although we are on a high programming language, the size of variables is very important when you are working with untyped / binary files and also socket programming, here is the basic types and also their sizes
Type  Storage size                        Range            
 
 Byte       1                             0 to 255
 ShortInt   1                          -127 to 127
 Word       2                             0 to 65,535
 SmallInt   2                       -32,768 to 32,767
 LongWord   4                             0 to 4,294,967,295
 Cardinal   4*                            0 to 4,294,967,295
 LongInt    4                -2,147,483,648 to 2,147,483,647
 Integer    4*               -2,147,483,648 to 2,147,483,647
 Int64      8    -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
 
 Single     4     7  significant digits, exponent   -38 to +38
 Currency   8    50+ significant digits, fixed 4 decimal places
 Double     8    15  significant digits, exponent  -308 to +308
 Extended  10    19  significant digits, exponent -4932 to +4932
 
 * Note : the Integer and Cardinal types are both 4 bytes in size at present (Delphi release 7), but are not guaranteed to be this size in the future. All other type sizes are guaranteed.
This table is pasted from the original source at http://www.delphibasics.co.uk/Article.asp?Name=Numbers a great website for leaning delphi language

Have a good and nice day everyone.

I'm trying to leaving my traces for anyone who would venture the world of programming

hehehehe :D

Minggu, 26 Juni 2011

Delphi : Tips on Retrieving/Storing Pointer/Objects/Clasess to/from a variant

Hello there! this really is a lovely day isn't it? :)
I come accross another great tips for you using variants object types and also how to use them with pointers and objects
for a little note, objects are classes, and objects and classes ARE pointers
  1. Storing pointers objects / classes / pointers to a variant
    1. cast the objects / classes / pointers to a native int : NativeInt(aPointer);
    2. store the NativeInt to the variant variable
  2. Retrieve stored pointers / objects / classes from a variant
    1. preapare a NativeInt variabele, and assign the variant containing objects / classes / pointers to the NativeInt variable
    2. cast the NativeInt variable to the pointer type, classes that you need TObject(the_NativeInt_variable).className;
Voila! another neat trick which will do the rest :) God bless you everyone!

Sabtu, 25 Juni 2011

Web Application using Pascal Language??

Yes!! This is indeed possible
ever wanted to create web apps using our favorit language (Pascal)??
you could do it using WebSnap, building web apps in a snap! hehe

here is a step by step guide for you to run and build a simple hello world application using CodeGear 2007 + websnap.
  1. Using wizzard, create a websnap application : file >> New >> Other >> Websnap Application
  2. Select  Web app debugger executable
  3. Enter your Class name and Page name
  4. Hit that OK Button
  5. Important, websnap use Indy9 instead of Indy10 so you should point your project search path to Indy9 Lib, on my computer it is in C:\Program Files\CodeGear\RAD Studio\5.0\lib\Indy9
  6. Now click on Run
  7. After the project compiles and runs, go to the IDE, Tools >> Web App Debugger
  8. On the Web App Debugger form, click on the Start button, now click on the default address http://localhost:8081/ServerInfo.ServerInfo
  9. Important, if you are on Window 7, or if you encounter an 404 Page you need to allow all of the firewalls permissions, go to the CodeGear installation directory(on my computer it is in C:\Program Files\CodeGear\RAD Studio\5.0\bin) and then run serverinfo.exe, try again that http://localhost:8081/ServerInfo.ServerInfo
  10. Congratulations!! this is your first WebSnap applications (Web app built on pascal language). Now.. go wild! :)
Have a great day everyone! This should revolutionize RAD WEB APP