ComboBox auslesen und reagieren
ComboBox auslesen und reagieren
Hallo zusammen,
ich habe eine Kombobox mit mehreren Einträgen und will bei Auswahl eines ein Bild sichtbar werden lassen:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
0: Image2.Visible:=true;
1: Image2.Visible:=true;
2: Image2.Visible:=true;
3: Image2.Visible:=true;
end;
end;
Keine Fehlermeldung, allerdings auch kein Resultat.
Was mache ich falsch?
Danke für Hinweise.
Hog
ich habe eine Kombobox mit mehreren Einträgen und will bei Auswahl eines ein Bild sichtbar werden lassen:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
0: Image2.Visible:=true;
1: Image2.Visible:=true;
2: Image2.Visible:=true;
3: Image2.Visible:=true;
end;
end;
Keine Fehlermeldung, allerdings auch kein Resultat.
Was mache ich falsch?
Danke für Hinweise.
Hog
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: ComboBox auslesen und reagieren
Hallo Hog,
du machst in der Case Auswahl immer Image2 sichtbar.
Schau dir mal das angehängte Beispiel an. Eventuell bringt dich das weiter.
Viele Grüße
Bernd
du machst in der Case Auswahl immer Image2 sichtbar.
Schau dir mal das angehängte Beispiel an. Eventuell bringt dich das weiter.
Viele Grüße
Bernd
- Dateianhänge
-
Combo.zip
- (125.25 KiB) 170-mal heruntergeladen
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: ComboBox auslesen und reagieren
Diese hat noch einen kleine Schönheitsfehler.Schau dir mal das angehängte Beispiel an. Eventuell bringt dich das weiter.
Die nicht gebrauchten Images müssen wieder unsichtbar werden.
Besser so:
Code: Alles auswählen
procedure TForm1.ComboBox1Change(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Length(Images) - 1 do Images[i].Visible := False;
case ComboBox1.ItemIndex of
0: Images[0].Visible:=true;
1: Images[1].Visible:=true;
2: Images[2].Visible:=true;
3: Images[3].Visible:=true;
end;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: ComboBox auslesen und reagieren
Danke für die Tipps. Jetzt funktioniert alles.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: ComboBox auslesen und reagieren
Hallo!
Die ComboBox.items und die Images laufen parallel.
Also geht's auch kürzer:
Grüsse Winni
Die ComboBox.items und die Images laufen parallel.
Also geht's auch kürzer:
Code: Alles auswählen
procedure TForm1.ComboBox1Change(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Length(Images) - 1 do Images[i].Visible := False;
if ComboBox1.ItemIndex >= 0 then
Images[ComboBox1.ItemIndex].Visible:=true;
end;
Grüsse Winni
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: ComboBox auslesen und reagieren
Wenn es noch kürzer als kürzer sein soll:
Code: Alles auswählen
procedure TForm1.ComboBox1Change(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Length(Images) - 1 do
Images[i].Visible := (i = ComboBox1.ItemIndex);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: ComboBox auslesen und reagieren
Hi!
Crashed aber wenn der ItemIndex = -1 (nix ausgewählt) ist.
Winni
Crashed aber wenn der ItemIndex = -1 (nix ausgewählt) ist.
Winni
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: ComboBox auslesen und reagieren
Warum denn das? ComboBox1.ItemIndex wird nur verglichen und nicht als Arrayelement verwendet.Winni hat geschrieben: Mo 24. Aug 2020, 00:50 Crashed aber wenn der ItemIndex = -1 (nix ausgewählt) ist.
In einem kurz zusammengeklickten Test hat es bei mir wunderbar funktioniert. Schwieriger fand ich nur, dass bei mSetzen des ItemIndex per Code das OnChange-Ereignis nicht aufgerufen wird und ich dann dieses manuell auslösen musste.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: ComboBox auslesen und reagieren
Hi!
Sorry - Du hast recht.
Das Auslösen des events onChange beim Setzen des Index per Code ist ein lästiges Thema:
Manche Komponenten lösen aus, andere nicht und bei den dritten kann man das per Option an- und ausschalten (TPageControl). Hier wäre ein konsistentes Verhalten wirklich nötig.
Winni
Sorry - Du hast recht.
Das Auslösen des events onChange beim Setzen des Index per Code ist ein lästiges Thema:
Manche Komponenten lösen aus, andere nicht und bei den dritten kann man das per Option an- und ausschalten (TPageControl). Hier wäre ein konsistentes Verhalten wirklich nötig.
Winni
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: ComboBox auslesen und reagieren
Wünschenswert wäre ausserdem, daß man ermitteln kann ob der Event durch eine Benutzeraktion oder durch Programmcode gefeuert wurde. Aber hier muss man sich dann auch irgendwie an die eigene Nase fassen. Lazarus ist quelloffen und jeder hat prinzipiell die Möglichkeit, solche Dinge zu implementieren und dann der Gemeinschaft zur Verfügung zu stellen.
Grüße
Michael
Grüße
Michael
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: ComboBox auslesen und reagieren
Meinst du so was ?Wünschenswert wäre ausserdem, daß man ermitteln kann ob der Event durch eine Benutzeraktion oder durch Programmcode gefeuert wurde.
Code: Alles auswählen
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
if Sender=Button1 then
WriteLn('Button1')
else
WriteLn('sonstige');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1Change(Button1);
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: ComboBox auslesen und reagieren
Nein, wenn man z.B. ComboBox1.ItemIndex := ComboBox1.ItemIndex + 1 macht, dann sollte der OnChange Event automatisch gefeuert werden mit ComboBox1 als Sender.Mathias hat geschrieben: Mo 24. Aug 2020, 13:30Meinst du so was ?Wünschenswert wäre ausserdem, daß man ermitteln kann ob der Event durch eine Benutzeraktion oder durch Programmcode gefeuert wurde.Code: Alles auswählen
procedure TForm1.ComboBox1Change(Sender: TObject); begin if Sender=Button1 then WriteLn('Button1') else WriteLn('sonstige'); end; procedure TForm1.Button1Click(Sender: TObject); begin ComboBox1Change(Button1); end;
Ich würde dann aber trotzdem gerne wissen, ob der Anwender den selektierten Eintrag eins weitergesetzt hat oder ob das per Programmcode geschehen ist.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: ComboBox auslesen und reagieren
Hi!
Das wäre alles machbar.
Aber die "Lazarus-Götter" sind dagegen.
Wenn man hier und da bei einer Komponente im Internationalen Forum fragt,
warum irgendwelcher Blödsinn nicht abgestellt wird, kommt die Antwort:
"Delphi-Kompatibilität"
Hat mich schon oft genug geärgert.
Winni
PS.: Und wenn Delphi mal was richtig macht, wehren sie sich auch dagegen.
Z.B. den Wert von $FFFFFFFFFFFFFFFF als MaxQWord zu interpretieren - und nicht als Integer.
Das wäre alles machbar.
Aber die "Lazarus-Götter" sind dagegen.
Wenn man hier und da bei einer Komponente im Internationalen Forum fragt,
warum irgendwelcher Blödsinn nicht abgestellt wird, kommt die Antwort:
"Delphi-Kompatibilität"
Hat mich schon oft genug geärgert.
Winni
PS.: Und wenn Delphi mal was richtig macht, wehren sie sich auch dagegen.
Z.B. den Wert von $FFFFFFFFFFFFFFFF als MaxQWord zu interpretieren - und nicht als Integer.
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: ComboBox auslesen und reagieren
Für was gibt es dann dieser Schalter ?"Delphi-Kompatibilität"
Code: Alles auswählen
{$mode delphi}
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: ComboBox auslesen und reagieren
"Hey Lord don't ask me questions"
Graham Parker, 1976
Graham Parker, 1976