Overzicht tips en truuks :                                                 Laatste update : 05-01-2000Home

A.Basis tips

A1. Het dynamisch aanmaken van forms
A2. Het dynamisch aanmaken van componenten en controls
A3. Een ovaal form maken
A4. Een splash form maken

B.
Algemene tips geavanceerd


B1. Procedure voor het in één keer en- of disablen van controls op bijv. een panel
B2. Procedure om in één keer alle TTables in een datamodule te openen.
B3. Enter als tab toets gebruiken
B4. Programma's starten middels ShellExecute
B5. Programma's starten middels WinExec

 

A1. Het dynamisch aanmaken van forms

Middels onderstaande code wordt een form dynamisch gecreëerd worden.
(Vergeet het form niet uit de lijst Auto-create-forms te verplaatsen naar de lijst
available forms in Delphi onder menu optie Project-Option- tab forms.)

  var MijnForm : TForm;
  ......// Meer code
  MijnForm:=TForm.Create(Self); // Creeer MijnForm
  MijnForm.Showmodal;
  MijnForm.Free;// ....en free het!

arrows.gif (215 bytes)Top


A2. Het dynamisch aanmaken van componenten en controls

Ook componenten en controls kunnen dynamish gecreëerd worden.
Geef dan ook de parent van de control aan :
(Het control moet immers weten waar hij zichzelf moet tekenen)

  var MijnButton : TButton;
  ......// Meer code
  MijnButton := TButton.Create(Self); // Creeer MijnButton
  MijnButton.parent := Self; // self is het Form-object waarin aanroep plaats vindt
// Of MijnButton.Parent := Panel1;

arrows.gif (215 bytes)Top


A3. Het maken van een ovaal form

Met de windows api functie SetWindowRgn kan je een mooie forms   maken :

procedure TForm1.FormCreate(Sender: TObject);
var Region : hRgn;
begin
  Region := CreateEllipticRgn(0, 0, Width , Height);
  SetWindowRgn(Handle, Region, True);
end;

arrows.gif (215 bytes)Top


A4. Het maken van een splash form

Een splashform is een form wat tijdens de opstart van een programma getoond wordt. Min of meer om de gebruiker bezig
te houden terwijl de applicatie start. Plaats onderstaande code in de project file van de applicatie tussen de begin en end
om een splashform aan je programma toe te voegen.

program SplashApp;

uses
  Forms,
  Mainunit in 'MAINUNIT.PAS' {MainForm},
  USplash in 'USplash.pas' {SplashForm},
 
{$R *.RES}

begin
  //Create the splashform and show it!
  SplashForm:=TSplashForm.Create(Application);
  SplashForm.Show; SplashForm.UpDate;

  Application.CreateForm(TMainForm, MainForm);//Start the application

  SplashForm.Hide; SplashForm.Free;//Free the splashform
  Application.Run;//Run the application
end.

B1. Procedure voor het in één keer en- of disablen van controls op bijv. een panel

Het komt regelmatig voor dat in een windows programma een bepaalde functie (nog) niet mogelijk of nodig is.
De betreffende controls worden dan zogenaamd disabled, zodat zij licht grijs zijn en niet reageren op aktie's van
de gebruiker. Het disablen van een control geschiedt door de property Enabled   van de betreffende control op
False te zetten. (MijnControl.Enabled := False;) Wanneer het een groot aantal controls betrefd is dit nogal omslachtig.
Wanneer het alle controls, op bijv. een panel betrefd kan e.e.a. versneld worden m.b.v.
de property controls en ControlCount.
Controls (van het type TWinControl) is als volgt gedeclareerd :

property Controls[Index: Integer]: TControl;

De property Controls is een array die alle Child controls van, in dit geval, het panel bevat.
Middels de Index kunnen de child controlsindividueel benaderd worden.
ControlCount bevat het aantal child controls. Middels onderstaande procedures kunnen alle controls op het
panel enabled of disabled worden.

procedure TEenDM.EnablePanel (aPanel : TPanel);
var Teller : Integer;

begin
  For Teller := 0 to aPanel.ControlCount - 1 do
  begin
     aPanel.Controls[Teller].Enabled := True;
  end;
end;

procedure TEenDM.DisablePanel (aPanel : TPanel);
var Teller : Integer;

begin
  For Teller := 0 to aPanel.ControlCount - 1 do
  begin
     aPanel.Controls[Teller].Enabled := False;
  end;
end;

arrows.gif (215 bytes)Top


B2. Procedure om in één keer alle TTables in een datamodule te openen.

Bij het ontwikkelen van database applicaties worden veel TTable componenten gebruikt. Deze componenten worden
in een datamodule geplaatst.
Het openen van een TTable geschiedt door de property Active op True te zetten.
Net als bij tip 1. is dit middels één procedure te automatiseren.
Met dit verschil dat we het hier over componenten hebben i.p.v controls.
Onderstaande procedure opent in één slag alle TTable componenten in de Datamodule.
Middels de sleutel is wordt bepaald of het betreffende component van het type TTable is.

procedure TEenDM.OpenEenDatabase;
var i ,n : Integer;
begin
  n := 0;
  try
  for i := 0 to ComponentCount-1 do
    begin
      n := i;
      if (Components[i] is TTable) then
      with TTable(Components[i]) do
        Active := True;
    end;
  except
    messagedlg('Fout in het openen van de tabel '+
    (Components[n] as TTable).name ,mtInformation, [mbOk] , 0);
  end;
end;

arrows.gif (215 bytes)Top


B3. Enter als tab toets gebruiken

In DOS zijn gebruikers gewend om middels <ENTER> naar een volgend veld te navigeren.
Onder windows is dit standaard met de <TAB>toets.
Een <ENTER> triggered meestal een default button waarmee bijvoorbeeld het Form wordt gesloten.
Onderstaande procedure zorgt ervoor dat de <ENTER> toets het zelfde doet als de <TAB> toets.
Dit wordt bewerkstelligd via de windows message WM_NEXTDLGCTL (zie ook de Delphi help)
Perform doet alsof de control een windowsmessage heeft ontvangen. Hiermee wordt de standaar windows message
afgevangen. Door key:= #0 is het net alsof er geen toets is ingedrukt.
De property KeyPreview van het form moet wel op true staan !

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    Perform( WM_NEXTDLGCTL, 0, 0 );
    Key := #0;
  end;
end;

arrows.gif (215 bytes)Top


B4. Programma's starten middels ShellExecute

Middels het windows api ShellExecute functie kan je vanuit je applicatie andere programma's opstarten.
De volgende parameters kunnen opgegeven worden :

HINSTANCE ShellExecute(

HWND hwnd,                    // handle to parent window
LPCTSTR lpOperation,     // pointer to string that specifies operation to perform
LPCTSTR lpFile,                // pointer to filename or folder name string
LPCTSTR lpParameters,  // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory,      // pointer to string that specifies default directory
INT nShowCmd                 // whether file is shown when opened
);

(Zie de Delphi help voor detail informatie over het gebruik van deze functie.
)
Indien de functie een waarde kleiner dan 32 retouneert is het starten van de applicatie niet gelukt.
Een applicatie kan middels onderstaande code gestart worden :

procedure TForm1.Button1Click;
Var X:String;

begin
  x:='C:\Program Files\Borland\Delphi5\bin\Delphi.exe';
  if ShellExecute(0, nil, PChar(x), nil, nil, SW_SHOWDEFAULT) <= 32 then 
    ShowMessage('Kan applikatie niet starten');  
end;

Naast executables kan je ook geassocieerde documenten, url's en mail-to's opgeven.
TLaunchLabel, van onze componenten pagina  maakt ook gebruik van de shellexecute functie.

arrows.gif (215 bytes)Top


B5. Programma's starten middels WinExec

Een alternatieve manier om programma's op te starten kan middels WinExec  :

procedure TForm1.Button1Click;
Var X:String;

begin
  x:='C:\Program Files\Borland\Delphi5\bin\Delphi.exe';
  if WinExec(PChar(x),SW_SHOWNORMAL) <= 32 then 
    ShowMessage('Kan applikatie niet starten');  
end;

arrows.gif (215 bytes)Top