Utilisation d'une ComboBox en csDropDown (Delphi7)
Bonjour,
J'utilise une ComboBox, avec propriété "Style" = csDropDown, afin de pouvoir saisir dans "ComboBox.Text" la valeur des occurrences à supprimer de la liste de la ComboBox (par "Ctrl + Suppr").
Quand je demande à supprimer une occurrence qui n'existe pas dans la liste, j'affiche un message à l'aide de "Application.MessageBox", mais à mon grand désarroi la valeur disparait alors de "ComboBox.Text".
Même si je réaffecte la valeur à "ComboBox1.Text", la valeur ne réapparait toujours pas, et le résultat est le même si j'utilise "ShowMessage" à la place de "Application.MessageBox".
Quand je supprime l'affichage du message, la valeur saisie reste bien affichée dans "ComboBox.Text".
(La valeur saisie disparait automatiquement de "ComboBox.Text" quand on la supprime de la liste, mais cela ne me gêne pas.)
Je voudrais pouvoir afficher un message, tout en conservant la valeur saisie affichée dans "ComboBox.Text" si elle est absente de la liste, je recherche une solution pour cela.
Peut-être quelqu'un aurait-il une idée ?
Merci d'avance pour votre aide.
Ci joint les sources de mon petit programme de test :
Source "test.pas" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| unit Test;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
FONCTION_DELETE = 46;
type
TFrmTest = class(TForm)
ComboBox: TComboBox;
Label1: TLabel;
Label2: TLabel;
procedure FormShow(Sender: TObject);
procedure ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure EnvisagerSuppressionDeLaListe ();
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
FrmTest: TFrmTest;
implementation
{$R *.dfm}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TFrmTest.FormShow(Sender: TObject);
begin
ComboBox.Clear;
ComboBox.Items.Insert(ComboBox.Items.Count, 'a');
ComboBox.Items.Insert(ComboBox.Items.Count, 'c');
ComboBox.Items.Insert(ComboBox.Items.Count, 'e');
ComboBox.Items.Insert(ComboBox.Items.Count, 'g');
ComboBox.Items.Insert(ComboBox.Items.Count, 'i');
ComboBox.Items.Insert(ComboBox.Items.Count, 'k');
ComboBox.Items.Insert(ComboBox.Items.Count, 'm');
ComboBox.Text := '';
end;
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TFrmTest.ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if ((ComboBox.Text <> '')
and (ssCtrl in Shift)) then
begin //Tester fonction suppres. ou insert.
if (Key = FONCTION_DELETE) then
begin //Envisager suppression
EnvisagerSuppressionDeLaListe ();
end;
end;
end;
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
procedure TFrmTest.EnvisagerSuppressionDeLaListe ();
var
i : integer;
sauve : string;
begin
i := 0;
while ((i < ComboBox.Items.Count)
and (ComboBox.Text > ComboBox.Items.Strings [i])) do
i := i + 1; //occurs de la liste
if ((i < ComboBox.Items.Count)
and (ComboBox.Text = ComboBox.Items.Strings [i])) then
begin
ComboBox.Items.Delete (i);
end
else
begin
sauve := ComboBox.Text;
Application.MessageBox (pChar ('N''existe pas dans la liste'), '', MB_OK + MB_ICONSTOP);
//ShowMessage (pChar ('N''existe pas dans la liste'));
//ComboBox.SetFocus;
//ComboBox.Text := sauve;
end;
end;
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
end. |
Source "test.dfm" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| object FrmTest: TFrmTest
Left = 538
Top = 117
Width = 260
Height = 279
Caption = 'FrmTest'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 16
Top = 56
Width = 113
Height = 17
AutoSize = False
Caption = 'csDropDown'
end
object Label2: TLabel
Left = 17
Top = 78
Width = 207
Height = 17
AutoSize = False
Caption = 'Supprimer de la liste : Ctrl + Suppr.'
end
object ComboBox: TComboBox
Left = 16
Top = 24
Width = 209
Height = 21
ItemHeight = 13
TabOrder = 0
Text = 'ComboBox'
OnKeyDown = ComboBoxKeyDown
end
end |
Source "TestComboBox.dpr" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| program TestComboBox;
uses
Forms,
Test in 'Test.pas' {FrmTest};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TFrmTest, FrmTest);
Application.Run;
end. |