Avatar billede lsc Nybegynder
18. oktober 2006 - 13:28 Der er 11 kommentarer

Rulle med combobox

Kære alle

Hvordan undgår man at brugeren kan rulle med teksten i en combobox med hjulet på musen?

Indholdet i comboboxen må ikke kunne ændres af brugeren (kun af programmet).

Jeg bruger Delphi 4.

Mange hilsener
lsc
Avatar billede kroning Nybegynder
18. oktober 2006 - 13:36 #1
Hvis indholdet ikke må ændres af brugeren hvorfor så ikke bruge noget andet, f.eks. en TEdit eller en TLable
Avatar billede tolderlund Nybegynder
18. oktober 2006 - 14:29 #2
Sæt readonly=true eller enabled=false.
Avatar billede lsc Nybegynder
18. oktober 2006 - 14:31 #3
kroning, fordi indholdet bliver sat ind af programmet, og alle ændringer kontrolleres inden de bliver sat ind. Jeg vil ikke have at brugerne selv kan rette i indholdet, de skal kun kunne vælge fra listen og de må heller ikke kunne rulle med indholdet, fordi det bliver registreret hvad det har været vist i comboboxen.
Avatar billede lsc Nybegynder
18. oktober 2006 - 14:36 #4
tolderlund, readonly findet ikke, og enabled := false gør at man ikke kan vælge noget fra listen.
Avatar billede stoney Nybegynder
18. oktober 2006 - 15:02 #5
sæt din combobox til csOwnerDrawFixed

og

procedure TForm1.ComboBox1Change(Sender: TObject);

begin
combobox1.ItemIndex := det index du nu vil ahve det skal være (integer) ;

 

end;

Stoney
Avatar billede martinlind Nybegynder
18. oktober 2006 - 17:40 #6
Det er rigtig at du skal sætte Style men du behøver ikke lave den OwnerDraw med mindre du selv vil "Tegne den", der er to mode's det ene er det den har default som ikke checker om det indtastede står i listen, det andet gør, kan desværre ikke lige huske hvad det hedder, med du kan vælge det DesignTime, og så er dit problem løst :)
Avatar billede lsc Nybegynder
18. oktober 2006 - 18:03 #7
stoney og martinlind

Jeg takker mange gange for svaret!

Men, csOwnerDrawFixed bevirker at combobox1.text (som bruges til en startværdi) ikke kommer frem når Style sættes lig csOwnerDrawFixed.
Når programmet tilføjer et nyt item, kommer det godt nok med i listen, men vises ikke i combobox1.text selvom det det er skrevet i programmet. Altså combobox1.text := navn; kan nu ikke bruges.

Ellers virker det og jeg takker, men kan i klare den sidste nød?

Mange hilsener
lsc
Avatar billede hrc Mester
19. oktober 2006 - 22:33 #8
Hvad med at ændre style til simple og så bruge OnKeyPressed til at neutralisere uønskede tastetryk i komponenten (<> <tab>)?
Avatar billede stoney Nybegynder
23. oktober 2006 - 10:14 #9
Brug nu index til at sætte din værdi i comboboxen

Nedenstående er testet og virker

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure ComboBox1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  defaultvalue : integer;
  comboboxitems : Tstringlist;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Change(Sender: TObject);

begin
combobox1.ItemIndex := defaultvalue; ;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
combobox1.Clear;
comboboxitems := Tstringlist.Create;
comboboxitems.Add('Tekst 1');
comboboxitems.Add('Tekst 2');
comboboxitems.Add('Tekst 3');
comboboxitems.Add('Tekst 4');


combobox1.Items.AddStrings(comboboxitems);

// her sættes combobox teksten 'Tekst 2'

defaultvalue := comboboxitems.IndexOf('Tekst 2');

combobox1.ItemIndex := defaultvalue;




end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comboboxitems.Free;
end;

end.

Stoney
Avatar billede hrc Mester
23. oktober 2006 - 10:32 #10
Stoney: Nu kan det være mig der ikke fanger guldkornene, men hvad er det du demonstrerer? Du laver en liste, sætter nogle ting ind i den, kopierer det hele til comboboksens liste hvor du sætter ItemIndex vha. en IndexOf. Listen bruger du ikke mere. Hvorfor ikke sætte data ind i Combo'en direkte?

combobox1.Clear;
combobox1.Items.Add('Tekst 1');
combobox1.ItemIndeex := combobox1.Items.Add('Tekst 2');
combobox1.Items.Add('Tekst 3');
combobox1.Items.Add('Tekst 4');

isc: Hvis du satte Style til simple vil komponenten ligner en TEdit men kan scrolle mellem værdierne vha. ItemIndex. Den kan desværre ikke sættes readonly, men der må du "æde" tastetryk vha. OnKeyPressed
Avatar billede stoney Nybegynder
23. oktober 2006 - 10:44 #11
Fordi jeg gik ud fra han har sine items i stringlist i forvejen og ville lave et eksempel.

Men ellers ville jeg add dem direkte i comboboxen.

Stoney
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester