13. marts 2007 - 00:32Der er
20 kommentarer og 1 løsning
combobox onchange trigger
ved onchange i combobox indlæses 2 forskellige billeder i en image
hvis man nu gemmer den aktuelle tekst fra combobox og indlæser den igen i combobox så sker der ikke en onchange
hvordan laver man det...
her er koden for onchange...
if combobox1.ItemIndex = 0 then begin form2.QRImage1.Picture.LoadFromFile('skib.bmp'); end; if combobox1.ItemIndex = 0 then begin Image1.Picture.LoadFromFile('skib.bmp'); end;
if combobox1.ItemIndex = 1 then begin form2.QRImage1.Picture.LoadFromFile('albert.bmp'); end;
if combobox1.ItemIndex = 1 then begin Image1.Picture.LoadFromFile('albert.bmp');
jeg ville mok smidde koden ind i en procedure du så kan kalde den, når du skal opdatere billederne:
procedure TForm1.UpdateImage; begin case ComboBox1.ItemIndex of 0: begin Form2.QRImage.Picture.LoadFromFile('skib.bmp'); Image1.Picture.LoadFromFile('skib.bmp'); end; 1: begin Form2.QRImage.Picture.LoadFromFile('albert.bmp'); Image1.Picture.LoadFromFile('albert.bmp'); end; end; end;
Sharon, kan du ikke uddybe dit problem lidt mere ? Hvis du selv ved at OnUpdate (eller UpdateImage ?) skal kaldes må du også kunne beskrive hvorfor ?
Synes godt om
Slettet bruger
14. marts 2007 - 22:12#8
det valgte item i combobox bliver gemt i en *.txt fil og indlæst igen i combobox, men der sker ikke en onchange når *.txt filen indlæses i en combobox, med resultat at billederne ikke skifter i henhold til den valgte item. Jeg har 2 items i min combobox når item 0 vælges ændres billedet ligeledes ved item1.
Synes godt om
Slettet bruger
14. marts 2007 - 22:16#9
a_nor
ved indlæsning af en *.txt fil bliver OnEnter ikke trigget, når der indlæses via en txt fil.
Du har ret i at ingen events trigges når teksten indsættes "udefra" som f.eks.
procedure TForm1.SpeedButton1Click(Sender: TObject); begin combobox1.Text := 'Test'; end;
Du må derfor sørge for at Tekstlinien fra din fil findes, sætte itemindex og så kalde (Onchange / ) UpdateImage-proceduren manuelt:
(Comboboxen bør have Style= csDropdownList for at undgå manuel tastning)
procedure TForm1.SpeedButton1Click(Sender: TObject); begin if combobox1.Items.IndexOf('Tekstlinie')>-1 then begin combobox1.ItemIndex:= Combobox1.Items.IndexOf('Tekstlinie'); ComboBox1Change(Sender); end; end;
Synes godt om
Slettet bruger
15. marts 2007 - 14:09#11
begin if combobox1.Items.IndexOf('skib')>-1 then begin combobox1.ItemIndex:= Combobox1.Items.IndexOf('albert'); ComboBox1Change(Sender); end;
hvis jeg sætter den i combobox OnChange så låser hele programmet
hvis jeg sætter den i listbox OnClick så virker den kun på 'albert' og ikke på 'skib' når txt filen indlæses via OnClick på listbox.
Hvis du sætter breakpoint på ComboBox1Change linien vil du indse hvorfor programmet låser, hvis du har sat den i comboboxens onchange.
Forstår ikke hvorfor der pludselig kommer en listbox ind i billedet ? (Og hvad du egentlig skal bruge den fil til hvis det ikke er for at kunne genskabe en tidligere tilstand)
Meningen var at du skulle bruge din OnChange-kode som du oprindelig skitserede (eller bedre som psycosoft-funware foreslog) og så sætte koden ind efter det sted du indlæser fra filen. Altså noget a la
min kode er lavet om som psycosoft har foreslået. Og den køre i OnChange i combobox den virker fint ved valg af item 0 og 1.
Navnet på den indlæste fil er i en listbox og når der trykkes på navnet bliver de forskellige edit felter indlæst samt combobox1. så det er ved indlæsning fra txt filen som ændre item i combobox men det virker kun delvis.
Du må da ved at sætte breakpoint på combobox1.ItemIndex:= Combobox1.Items.IndexOf(Tekstliniefrafil); kunne tjekke om itemindexet sættes korrekt i tilfældet der IKKE virker.
var Form1: TForm1; Ini: TIniFile; //global variable til ini objektet
implementation
{$R *.dfm}
procedure TForm1.Load; //procedure til at hente sti til de billeder du vil indlæse begin Ini := TiniFile.Create(ExtractFilePath(ParamStr(0)) + 'Test.ini'); //her creater vi Ini objektet og viser hvor ini filen findes try //vi putter koden ind i en try-finally blok, det gør at hvis programmet ikke kan finde ini filen eller på anden måd brokker sig, så er man sikker på at objektet bliver frigivet igen with Ini do //en with-do sætning fjerner brugen af ini.[property], hvis man skal bruge mange properties fra det samme objekt kan det betale sig at bruge denne sætning begin ComboBox1.Items.Add(ReadString('Billeder', 'Skib', 'Skib')); //læsning af ini filen; det første parameter viser hvilken gruppe i ini filen man vil hente dataen, andet parameter vister hvilket navn dataen er gemt under og sidste parametre kan man angive en standard værdi såfremt at gruppen/navnet ikke findes ComboBox1.Items.Add(ReadString('Billeder', 'Albert', 'Albert')); end; finally Ini.Free; //vi rydder op igen end; end;
procedure TForm1.Save; begin Ini := TiniFile.Create(ExtractFilePath(ParamStr(0)) + 'Test.ini'); try with Ini do begin WriteString('Billeder', 'Albert', ComboBox1.Items[0]); //skriver indholdet fra position 0 fra comboboxen WriteString('Billeder', 'Skib', ComboBox1.Items[1]); //...fra position 1 end; finally Ini.Free; end; end;
procedure TForm1.UpdateImage; const Skib: String = 'C:\Bmp\skib.bmp'; Albert: String = 'C:\Bmp\albert.bmp'; begin case ComboBox1.ItemIndex of 0: begin Image2.Picture.LoadFromFile(skib); Image1.Picture.LoadFromFile(skib); end; 1: begin Image2.Picture.LoadFromFile(albert); Image1.Picture.LoadFromFile(albert); end; end; end;
procedure TForm1.ComboBox1Change(Sender: TObject); begin UpdateImage; end;
procedure TForm1.Button1Click(Sender: TObject); begin Save; COmboBox1.Clear; end;
procedure TForm1.Button2Click(Sender: TObject); begin Load; Combobox1.ItemIndex := 0; UpdateImage; end;
end.
:)
Synes godt om
Slettet bruger
18. marts 2007 - 12:37#16
hmm ikke helt....
ved click på listbox bliver et linienummer fra en txt fil indlæst i combobox som så skal reagere ud fra den tekst som er indlæst.
onclick på listbox
Combobox1.Text:= afvent.lines[2];
combobox skifter også via case...
case ComboBox1.ItemIndex of 0: begin Image1.Picture.LoadFromFile('skibhus.bmp'); 1: begin Image1.Picture.LoadFromFile('alberte.bmp');
alt det virker ved manuel valg men ikke når txt filen indlæses....
måske jeg ikke er god til at forklare så bær over med mig - for jeg vil gerne havde den funktion til at virke..jeg burde nok havde nævn listbox i mit spørgsmål.
Sharon - Jeg troede vi var enige om at Combobox1.Text skulle ændres vha Combobox1.Items.IndexOf("udpagende tekst" =? afvent.lines["valgt linienr"]); ? ? og du dermed slet ikke skal bruge Combobox1.Text:= afvent.lines[2];
psycosoft-funware - Sharon vil gerne udført funktionen Combobox1.onchange selvom denne ændring påtrykkes af en anden kontrol. OnChange fyres desværre kun af ved valg med mus eller taster i comboboxen. Comboboxens itemindex må findes ved afviklingen af den udførende kontrol da itemindex bruges i din UpdateImage funktion, Efterfølgende skal kaldet af UpdateImage selvfølgelig også udføres. jf. min ovenstående kommentar af 15.3 10.47 Selvfølgelig skal det ikke være faste tekster der bruges men værdier fra f.eks listboxen ?
Undskyld stavemåden ;O Der skal selvfølgelig stå "udpegende tekst"
Synes godt om
Slettet bruger
21. marts 2007 - 13:53#19
kiggede på en anden indgangsvinkel og fandt en anden måde at gøre det på...
i listbox1.OnClick
if afvent.Lines[2] = 'SKIB.DK' then image1.Picture.LoadFromFile('skib.bmp') else image1.Picture.LoadFromFile('albert.bmp');
Nu er det listbox der sørger for skift af de 2 billeder i image1
Synes godt om
Slettet bruger
23. marts 2007 - 14:04#20
smid et svar hvem der vil have point
Synes godt om
Slettet bruger
31. marts 2007 - 16:40#21
ingen svar .... så ...
Synes godt om
Ny brugerNybegynder
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.