DELPHI ; Astuces

ING_HYD · 11 · 11901

ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: أيلول 24, 2010, 02:57:50 مسائاً
Sous cette rubrique, je vais essayer de poster des astuces pratiques et qui fonctionnent avec les différentes versions de Delphi. L'astuce sera bien rédigée, commentée et le source indenté

Toute critique ou demande d'explication est la bienvenue


ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: أيلول 24, 2010, 03:13:51 مسائاً
Voici une technique qui vous permette de rafraîchir votre dbgrid sans perdre la ligne en cours

Vous commencez par créer une classe qui hérite de la classe TDBgrid, vous lui affecter  le dataset, la position de la ligne en cours, vous faites appel à la méthode refresh, puis c'est l'opération inverse qui sera faite

شفرة: [اختيار]

THackDBGrid = class(TDBGrid)
 
procedure Refresh_PreservePosition;
 var
   rowDelta: Integer;
   row: integer;
   recNo: integer;
   ds : TDataSet;
 begin
   ds := THackDBGrid(DBGrid1).DataSource.DataSet;
 
   rowDelta := -1 + THackDBGrid(DBGrid1).Row;
   row := ds.RecNo;
 
   ds.Refresh;
 
   with ds do
   begin
     DisableControls;
     RecNo := row;
     MoveBy(-rowDelta) ;
     MoveBy(rowDelta) ;
     EnableControls;
   end;
 end;


ليلى الحياة100

  • Hero Member
  • *****
    • مشاركة: 3712
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: أيلول 24, 2010, 03:56:48 مسائاً
السلام عليكم ورحمة الله تعالى وبركاته

يعطيك الصحة وجزاك الله كل الخير اخي الكريم ....سيكون موضوعك جد مفيد للمبرمجين ...تحية


ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: أيلول 28, 2010, 09:13:32 صباحاً
Salam

Je vous présente la deuxième astuce, il s'agit d'un bout de code qui vous permet de controler les touches majuscules et ver num par programmation

شفرة: [اختيار]
procedure ToggleNumLock;
 var
    KeyState: TKeyboardState;
 begin
    //note: Use VK_CAPITAL for Caps Lock
 
    GetKeyboardState(KeyState) ;
 
    //simulate key events (down + up)
    if (KeyState[VK_NUMLOCK] = 0) then
    begin
      Keybd_Event(VK_NUMLOCK, 1, KEYEVENTF_EXTENDEDKEY or 0, 0) ;
      Keybd_Event(VK_NUMLOCK, 1, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0) ;
    end
    else
    begin
      Keybd_Event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY or 0, 0) ;
      Keybd_Event(VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0) ;
    end;
 end;


ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #4 في: تشرين الأول 09, 2010, 06:11:54 صباحاً
Salam

ASTUCE N°03 : Comment désactiver le menu surgissant du composant EDIT
[/COLOR]
La troisième astuce consiste à désactiver le menu surgissant (popup) qui apparait lorqu'on clic avec le bouton droit sur le composant Edit. Dans beaucoup de situations on n'a pas besoin de ce menu, voici une technique très simple pour qu'il disparaisse
شفرة: [اختيار]
procedure TForm1.Edit1ContextPopup(
    Sender: TObject;
    MousePos: TPoint;
    var Handled: Boolean) ;
 begin
    //disable default context popup
    Handled := True;
 end;


ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #5 في: تشرين الأول 10, 2010, 11:58:38 صباحاً
Salam

ASTUCE N°04 : Comment parcourir les champs d'édition par l'appui de la touche "entrée" dans un formulaire


Il arrive très souvent que l'on veuille donner le focus au contrôle suivant (dans l'ordre spécifié par la propriété TabOrder) dans un formulaire à condition que ce contrôle ait TabStop à true. Nous utilisons ici un gestionnaire d'évènement commun à tous les contrôles TEdit qui passera au contrôle suivant si nous appuyons sur Entrée


شفرة: [اختيار]
procedure TMainForm.GoToNextEditControls(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_RETURN then
PostMessage(self.Handle,WM_NEXTDLGCTL,0,0);
//Nous pouvons aussi utiliser : perform(WM_NEXTDLGCTL,0,0);
end;


ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #6 في: تشرين الأول 29, 2010, 05:28:43 مسائاً
Salam

ASTUCE N°05 : Ouvrir une table ADO

Les composants ADO ont fait leur preuve et ne sont plus à démontrer. Cette procédure est très simple d'emploie elle se contente d'ouvrir une table ADO et renvoie un message d'erreur en cas d'échec

شفرة: [اختيار]
procedure OuvrirTableADO(ATableADO: TADOTable);
begin
  try
    ATableADO.Open;
  except
    on E: Exception do
      raise Exception.CreateFmt('Erreur lors de l''ouverture de la table %s', [ATableADO.Name]);
  end;
end;


ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #7 في: كانون الثاني 11, 2011, 10:18:58 مسائاً
ASTUCE N°06 : ShowMessage en Overlay

Sachant que le ShowMessage n'accepte que le type string comme argument alors on est obligé de faire des conversion si on veut passer des entiers, réel, date ou boolean. Cette technique est assez répondue chez les programmeurs mais on peut faire mieux ! et oui on peut surcharger le ShowMessage c'est ce qu'on appel Overloading la fonction ShowMessage

La technique est assez simple, on redéfinis le ShowMessage pour chaque type dans l'unité Common.pas comme suit

شفرة: [اختيار]
unit common;
 
 interface
 
 uses dialogs, sysutils;
 
 procedure ShowMessage(const value : string) ; overload;
 procedure ShowMessage(const value : integer) ; overload;
 procedure ShowMessage(const value : extended) ; overload;
 procedure ShowMessage(const value : boolean) ; overload;
 
 implementation
 
 //displays a string in a dialog box
 procedure ShowMessage(const value : string) ;
 begin
   Dialogs.ShowMessage(value) ;
 end;
 
 //displays an integer in a dialog box
 procedure ShowMessage(const value : integer) ;
 begin
   ShowMessage(IntToStr(value)) ;
 end;
 
 //displays a float in a dialog box
 procedure ShowMessage(const value : extended) ;
 begin
   ShowMessage(FloatToStr(value)) ;
 end;
 
 //displays a boolean in a dialog box
 procedure ShowMessage(const value : boolean) ;
 begin
   ShowMessage(BoolToStr(value, true)) ;
 end;
[B]end.[/B]
 

 Puis il suffit d'appeler l'unité Common dans la partie uses de votre projet mais attention si vous avez dans les uses l'unité Dialogs celle-ci doit être déclaré avant l'unité common


annabil23

  • Newbie
  • *
    • مشاركة: 43
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #8 في: شباط 05, 2011, 01:59:56 مسائاً


amnela

  • Newbie
  • *
    • مشاركة: 47
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #9 في: آذار 03, 2011, 06:25:25 مسائاً
salam alikoum
merci pour les astuces c'est intéréssant


ING_HYD

  • Hero Member
  • *****
    • مشاركة: 1124
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #10 في: نيسـان 15, 2011, 04:04:44 مسائاً
Salam

Astuce n°07 : comment faire une recherche dans une base données

je vais vous présenter une fonction qui peut-être utiliser comme un standard dans vos recherche avec comme contrainte l'utilisation des composants ibx puisque j'utilise en général des bases de données de type FireBird
شفرة: [اختيار]
function TfmMain.Verifier_Ref(IBQ : TIBQuery; Table, Champ, Val : string) :
boolean;
var
  ch : string;
begin
  Result := False;
  ch := '';
  try
    IBQ.Close;
    IBQ.SQL.Clear;
    if (Champ = '') then Exit
    else ch := 'Select * from ' + Table + ' Where ' + Champ + '=' + QuotedStr(Val);
    IBQ.SQL.Add(ch);
    IBQ.Open;
    if not(IBQ.IsEmpty) then Result := True;
  except
    on E : exception do
    begin
      Result := False;
      ShowMessage(E.Message);
    end;
  end;
end;