Een gereedschapskist vol met allerlei handige tips en tricks is altijd handig. Hieronder volgen een aantal tips voor de Delphi adepten onder ons. Er zijn verschillende sites op het internet te vinden waar je zelfs wekelijks geïnformeerd kan worden over de laatste ontwikkelingen op Delphi gebied en die deze nieuwtje vergezeld doen gaan van allerlei handige tips en tricks. Zo zijn ook onderstaande tips verzameld.
NIET ALLEEN BMP als Glyph in BitBtn of SpeedButton
{TBitBtn en TSpeedButton accepteren aleen BMP pictures, als je een ander picture formaat hebt, zoals ICO of JPG, (in een Image component) dat je als Glyph wilt gebruiken, moet je dat omzetten naar een Bitmap:}
var
bmp: TBitmap;
begin
bmp:=TBitmap.Create;
try
bmp.Width := Image.Picture.Graphic.Width;
bmp.Height := Image.Picture.Graphic.Height;
bmp.Canvas.Draw(0, 0, Image.Picture.Graphic);
BitBtn.Glyph:=bmp;
finally
bmp.Free;
end;
end;
Drag en Drop Nodes in een TreeView
{De volgende code gebruikt GetNodeAt in een gesleepte node toe te voegen als een childnode van de node onder de positie van de muis als De node gedropt wordt}
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
begin
if TreeView1.Selected = nil then Exit;
HT := TreeView1.GetHitTestInfoAt(X, Y);
AnItem := TreeView1.GetNodeAt(X, Y);
if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
begin
if (htOnItem in HT) or (htOnIcon in HT) then
AttachMode := naAddChild
else
if htNowhere in HT then
AttachMode := naAdd
else if htOnIndent in HT then
AttachMode := naInsert;
TreeView1.Selected.
MoveTo(AnItem, AttachMode);
end;
end;
Haal de standaard Printernaam op.
uses Printers;
function GetDefaultPrinterName : string;
begin
if (Printer.PrinterIndex > 0) then
Result := Printer.Printers[Printer.PrinterIndex];
else
Result := '';
end;
Schakel de Screensaver uit
In plaats van daadwerkelijk de screensaver uit te schakelen is het ook mogelijk om Windows te laten geloven dat de call naar de standaard screen saver reeds is afgehandeld.
{ Voeg de volgende code toe aan de "public" section van je main form: }
procedure AppMessage(var Msg : TMsg; var bHandled : boolean );
{ In de OnCreate van het main form voegen we toe: }
Application.OnMessage := AppMessage;
{ In de "implementation" section, zetten we de volgende code (aangenomen dat Form1 de naam van het
form is): }
procedure TForm1.AppMessage( var Msg : TMsg; var bHandled : boolean );
begin
if((WM_SYSCOMMAND = Msg.Message) and
(SC_SCREENSAVE = Msg.wParam) )then
bHandled := True;
end;
Cursor Positie in een TRichEdit
"Hoe Kan ik de "huidige" Regel en Kolom (Row/Col) vaststellen van een cursor in een TRichEdit?"
Usage:
var sRC: string;
src := GetPosition(RichEdit1);
//src reulteert in een string
//geformateerd als: Row:Col
function GetPosition(ARichEdit: TRichEdit): string
var
iX,iY : Integer;
begin
iX := 0; iY := 0;
iY := SendMessage(ARichEdit.Handle,
EM_LINEFROMCHAR,
ARichEdit.SelStart,0);
iX := ARichEdit.SelStart - SendMessage(ARichEdit.Handle,
EM_LINEINDEX, iY, 0);
Result := IntToStr(iY + 1) + ':' + IntToStr(iX + 1) ;
end;Een applicatie met een File Extensie associëren
De code in de OnClick van Button1 maakt dat "adp" geopend zal worden door "c:\appkill.exe"
uses registry, shlobj;
procedure RegisterFileType(ExtName:String; AppName:String);
var
reg:TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey:=HKEY_CLASSES_ROOT;
reg.OpenKey('.' + ExtName, True);
reg.WriteString('', ExtName + 'file');
reg.CloseKey;
reg.CreateKey(ExtName + 'file');
reg.OpenKey(ExtName + 'file\DefaultIcon', True);
reg.WriteString('', AppName + ',0');
reg.CloseKey;
reg.OpenKey(ExtName + 'file\shell\open\command', True);
reg.WriteString('',AppName+' "%1"');
reg.CloseKey;
finally
reg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterFileType('adp','c:\appkill.exe');
end;
Slepen van een ListBox naar een Edit
Zet ListBox.DragMode = dmAutomatic vanuit de Object Inspector.
De events OnDragOver en OnDragDrop van de Edit control worden zoiets als:
procedure TForm1.Edit1DragOver(Sender, Source: TObject;
X,Y: Integer; State:TDragState;
var Accept: Boolean);
begin
Accept := True;
end;
procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X,Y: Integer);
begin
(Sender as TEdit).Text :=
(Source as TListBox).Items[(Source as TListBox).ItemIndex]
end;