Forums | Contact | Plan du site Menu Accueil » Programmation

Trucs et astuces - généralités

Mettre une icônes dans la barre de tâches Windows
Information sur un Fichier
Empêcher la fermeture du programme (avec ALT+F4 / avec la croix)
Cacher un programme de la liste des tâches (Ctrl+Alt+Supp)
Réduire / Etendre le menu système
Désactiver l'écran de veille pendant l'exécution de vos applications
Faire défiler une image du style Acrobat Reader (par cliqué / déplacé)
TEdit: empécher le beep lorsque l'on appuie sur la touche entrée
TEdit: aligner le texte à droite
TEdit: empêcher l'utilisateur d'entrer certaines touches dans une boite de saisie

 


Empêcher la fermeture du programme

 

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=FALSE;
end;

 


Cacher un programme de la liste des tâches

 

procedure ctrl_alt_suppr;
var handle:integer;
  proc:function(dwProcessId: DWORD; dwType: DWORD)
  : DWORD; stdcall;
begin
  Handle:=LoadLibrary('krn386.exe');
  if Handle=0 then Handle:=LoadLibrary('kernel32.dll');
  if Handle<>0
  then begin
    @proc:=GetProcAddress(Handle, 'RegisterServiceProcess');
    if @proc<>nil then proc(0,1);
    FreeLibrary(Handle);
    end;
end;

 


Réduire / Etendre le menu système

 

// Réduire le menu système
procedure TForm1.Button1Click(Sender:TObject);
var handle: THandle;
begin
  handle:=GetSystemMenu(Self.Handle,false);
  RemoveMenu(handle, 8, mf_byposition);
  RemoveMenu(handle, 7, mf_byposition);
  RemoveMenu(handle, 6, mf_byposition);
  RemoveMenu(handle, 5, mf_byposition);
end;

// Etendre le menu système
unit Unit1;
interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Buttons;

type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
private
procedure WMSysCommand(VAR Message: TWMSysCommand); message WM_SYSCOMMAND;
public
end;

var
Form1: TForm1;

implementation

uses Unit2;

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  Inherited;
  IF Message.CmdType = $F200 THEN form2.showmodal
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  s: string;
begin
  s := '&Copyright...';
  AppendMenu(GetSystemMenu(Handle, False), MF_STRING, $F200,   PChar(s));
end;

 


Désactiver l'écran de veille pendant l'exécution de vos applications

 

Pour éviter que l'écran de veille ne se déclanche pendant votre application, utilisez cette procédure :

interface
...
private
procedure AppMessage(var msg: TMsg; var handled: boolean);
...

implementation

...

procedure TForm1.AppMessage(var msg : TMsg; var handled : boolean);
begin
if (Msg.Message = WM_SYSCOMMAND) and (Msg.wParam = SC_SCREENSAVE) then Handled := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := AppMessage;
end;


Faire défiler une image du style Acrobat Reader

 

Pour faire défiler l'image il faut:
- mettre un composant TScrollBox sur la fiche
- mettre un composant TImage dans le TScrollBox,
- définir la propriété AutoSize de cette image à True.

  Si l'image ouverte dans le TImage est plus grande que le ScrollBox, la barre de défilement habituelle va apparaître. Par défaut, il faut utiliser cette barre pour faire défiler l'image. En ajoutant ce code, vous pourrez faire défiler l'image en cliquant et en déplaçant la souris sur l'image.

Ajoutez cette ligne avant implementation: et juste après Form1: TForm1;
hauteurscrollbar, hauteursouris :integer;

// ajoutez ce code dans l'évènement OnMouseMove du composant image
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
  if Shift=[ssLeft] then scrollbox1.VertScrollBar.Position:= hauteurscrollbar +
    (y-hauteursouris) - (scrollbox1.VertScrollBar.Position-hauteurscrollbar);
end;

// ajoutez ce code dans l'évènement OnMouseDown du composant image
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  screen.Cursor:= crSizeNS;
  hauteursouris:= y;
  hauteurscrollbar:= scrollbox1.VertScrollBar.Position;
end;

// ajoutez ce code dans l'évènement OnMouseUp du composant image
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  screen.Cursor:= crDefault;
end;


TEdit: empécher le beep lorsque l'on appuie sur la touche entrée

 

  Dans un TEdit (boîte de saisie), il est parfois utile de pouvoir appuyer sur [Entrée] pour effectuer une action (pour traitement du texte entré). Mais comment supprimer le beep émi lorsque l'on appuie sur entrée ? Le TEdit dispose d'un événement OnKeyPressed réagissant comme son nom l'indique lorsqu'une touche du clavier est enfoncée et que le TEdit a la focalisation. Il faut donc dire au programme de la bloquer si la touche [Entrée] est enfoncée:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  // NB: #13 est le code da la touche entrée et #0 est nul.
  if key= #13 then begin
    key:= #0;
    // mettez ici les instructions à effectuer si la touche entrée est enfoncée
  end;
end;


TEdit: aligner le texte à droite

 

procedure TForm1.Button1Click(Sender: TObject);
var
OldSysLocal: TSysLocale;
begin
  OldSysLocal:= SysLocale;
  SysLocale.MiddleEast:= True;
  Edit1.BiDiMode:= bdRightToLeft;
  SysLocale:= OldSysLocal;
end;

 


TEdit: empêcher l'utilisateur d'entrer certaines touches dans une boite de saisie

 

  Dans un TEdit, il est souvent nécessaire de bloquer certaines touches. Par exemple, dans une boîte de saisie ne devant contenir que des valeurs numériques, il ne faut autoriser que les touches adéquates (pavé numérique, virgule...). Le TEdit dispose d'un événement OnKeyPressed réagissant comme son nom l'indique lorsu'une touche du clavier est enfoncée et que le TEdit a la focalisation. Il faut donc dire au programme quelles touches accepter et les autres seront bloquées:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
// si la touche n'est pas l'une de celles énumérées, on renvoie #0.
  if not (key in [#8,'0'..'9',DecimalSeparator,'+','-']) then key:= #0;
end;

 


Une question ? Venez échanger sur le forum...
Nom :
Sujet :
 

© Cédric MICHEL - conseil & création ( 2003 / 2019 )