Overzicht tips en truuks :
Laatste update : 05-01-2000![]()
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! |
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; |
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; |
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;
|
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;
|
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;
|
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.
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;
|