Bonjour
Comment savoir quels sont les boutons actifs (non grisés) dans un DBNavigator.
Je ne veux pas savoir quel bouton a été enfoncé, mais lesquels sont sucseptibles d'être enfoncés.
Merci.
Bonjour
Comment savoir quels sont les boutons actifs (non grisés) dans un DBNavigator.
Je ne veux pas savoir quel bouton a été enfoncé, mais lesquels sont sucseptibles d'être enfoncés.
Merci.
Bonjour,
Lorsque vous utilisez le navigateur pour utiliser un fichier .dbf vous devez
configurer le navigateur exemple :
c'est donc à vous même de définir les boutons du navigateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 var DBNavSt : TDBNavigator; ... begin ... DBNavSt.VisibleButtons := [nbFirst,nbPrior,nbNext,nbLast]; ...
Seront en gris ceux qui ne sont pas momentanément utilisables, exemple
nbFirst et nbPrior si vous ètes sur le premier enregistrement du fichier.
Les autres boutons, Suivant et Dernier, sont tous utilisabies.
Salutations.
Salut
Malheureusement la propriété Buttons de la classe TDBNavigator est protégée, donc impossible d'y accéder directement.
La solution est de définir une classe dérivée de TDBNavigator pour pouvoir y accéder.
Ensuite depuis ton formulaire, tu créé dynamiquement ton DBNav:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 interface type TMyDBNav = class(TDBNavigator) private function GetEnableButtons: TButtonSet; published property EnableButtons: TButtonSet read GetEnableButtons; end; implementation function TMyDBNav.GetEnableButtons: TButtonSet; var i: TNavigateBtn; begin result := []; for i := Low(Buttons) to High(Buttons) do if (Buttons[i].Visible) and (Buttons[i].Enabled) then Include(result, i); end;
et enfin tu peux récupérer l'état des boutons pour un instant donné ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.FormCreate(Sender: TObject); begin FNav := TMyDBNav.Create(Self); FNav.Align := alBottom; FNav.Parent := Self; FNav.DataSource := DataSource1; end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 var BoutonDispo: TButtonSet; begin BoutonDispo := FNav.EnableButtons; // Pour tester si le bouton 'First' est dispo if nbFirst in BoutonDispo then ShowMessage('Bouton ''First'' dispo !'); end;
[edit]
Sinon autre solution tu dois avoir la possiblité de déterminer l'état des tes buttons en examinant le DataSet (sa position avec Bof et Eof, et son état : dsBrowse, dsEdit, dsInsert, ...).
[/edit]
@+ Claudius
Merci Claudius,
Cela m'a l'air d'être tout à fait ce que je désire.
Parcontre j'ai un souci avec le TbuttonSet : identificateur non déclaré.
Je suppose qu'il me manque quelque chose.
Salut
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2uses ..., ExtCtrls, DBCtrls;
I have got themEnvoyé par Cl@udius
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DaTMB, DBGrids, DBCtrls, Mask, Grids, ExtCtrls, jpeg, DB, DBTables, ComCtrls, Buttons ;
Re,
Envoyé par mesquest
Dans la version que j'utilise (Delphi7) TButtonSet est défini dans l'unité DBCtrls. Vérifies ce que te précise le fichier d'aide de ta version (si différent mais je n'y crois pas trop).
@+ Claudius
Salut, a priori tbuttonset est plutot une fonction pour C++ voila ce que l'on trouve dans l'aide.Envoyé par Cl@udius
et pour langage delphi le même code n'utilise pas tbuttonset :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 [C++]void __fastcall TForm1::CustomerCompanyEnter(TObject *Sender) { if (Sender == (TObject *)CustomerCompany) { DBNavigatorAll->DataSource = CustomerCompany->DataSource; DBNavigatorAll->VisibleButtons = TButtonSet() << nbFirst << nbPrior << nbNext << nbLast; } else { DBNavigatorAll->DataSource = OrderNum->DataSource; DBNavigatorAll->VisibleButtons = TButtonSet() << nbInsert << nbDelete << nbEdit << nbPost << nbCancel << nbRefresh; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 [Delphi]procedure TForm1.CustomerCompanyEnter(Sender :TObject); begin if Sender = CustomerCompany then begin DBNavigatorAll.DataSource := CustomerCompany.DataSource; DBNavigatorAll.VisibleButtons := [nbFirst,nbPrior,nbNext,nbLast]; end else begin DBNavigatorAll.DataSource := OrderNum.DataSource; DBNavigatorAll.VisibleButtons := DBNavigatorAll.VisibleButtons + [nbInsert, nbDelete,nbEdit,nbPost,nbCancel,nbRefresh]; end; end;
Ca y est cela fonction.
Il me fallait utiliser TNavButtonSet a la place de TbuttonSet
Merci beaucoup Claudius
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager