Avatar billede Slettet bruger
13. marts 2007 - 00:32 Der 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');
Avatar billede psycosoft-funware Nybegynder
13. marts 2007 - 00:40 #1
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;

:)


derefter har det
Avatar billede a_nor Nybegynder
13. marts 2007 - 11:37 #2
onChange trigges ved ÆNDRINGER i Text. Hvis du vil have udført noget selvom dette ikke er tilfældet må du bruge noget andet logik. F.eks vha. onEnter. 

I øvrigt synes jeg du skal strukturere din kode lidt som psycosoft-funware fint skitserer.
Avatar billede scorpe Nybegynder
13. marts 2007 - 15:18 #3
Hvorfor har du ikke sat Else ind?
Avatar billede Slettet bruger
13. marts 2007 - 18:39 #4
kan godt se psycosoft struktur er bedre men jeg er ikke så stiv i case men absolut en hurtigere afvikling.

scorpe "else" i hvad?
Avatar billede Slettet bruger
13. marts 2007 - 18:44 #5
hmm psycosoft mangler der ikke noget i "private" en form for indentifier får en fejl.
Avatar billede Slettet bruger
13. marts 2007 - 19:06 #6
psycosoft din kode virker fint i onchange

Men ikke det jeg spurgte om...

men els tak for måden at bruge case på...
Avatar billede a_nor Nybegynder
14. marts 2007 - 07:04 #7
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 ?
Avatar billede 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.
Avatar billede 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.
Avatar billede a_nor Nybegynder
15. marts 2007 - 10:47 #10
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;
Avatar billede 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.
Avatar billede a_nor Nybegynder
16. marts 2007 - 07:07 #12
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   

readln(fil,tekstliniefrafil);
combobox1.ItemIndex:= Combobox1.Items.IndexOf(Tekstliniefrafil);
ComboBox1Change(Sender);
 
mvh
Avatar billede Slettet bruger
16. marts 2007 - 08:27 #13
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.
Avatar billede a_nor Nybegynder
16. marts 2007 - 09:30 #14
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.
Avatar billede psycosoft-funware Nybegynder
16. marts 2007 - 12:12 #15
er det sådan noget i den stil du tænker på?:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    procedure ComboBox1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure UpdateImage;
    procedure Load;
    procedure Save;
  public
    { Public declarations }
  end;

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.

:)
Avatar billede 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.
Avatar billede a_nor Nybegynder
18. marts 2007 - 19:50 #17
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 ?
Avatar billede a_nor Nybegynder
18. marts 2007 - 19:52 #18
Undskyld stavemåden  ;O  Der skal selvfølgelig stå "udpegende tekst"
Avatar billede 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
Avatar billede Slettet bruger
23. marts 2007 - 14:04 #20
smid et svar hvem der vil have point
Avatar billede Slettet bruger
31. marts 2007 - 16:40 #21
ingen svar .... så ...
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
Kategori
Kurser inden for grundlæggende programmering

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