AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Comboboxen Summieren bei onChange

Ein Thema von cobus_tschulz · begonnen am 9. Feb 2010 · letzter Beitrag vom 9. Feb 2010
Antwort Antwort
cobus_tschulz

Registriert seit: 31. Jan 2010
15 Beiträge
 
#1

Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 14:26
Hallo zusammen,

ich habe folgendes vor:

Ich habe eine Form mit 4 Comboboxen und einem TEdit Feld wo die Summe angezeigt werden sollt.
So nun sind diverse Einträge in den Comboboxen wie z.B.

Delphi-Quellcode:
Dieser Beitrag ist interessant (10)
Dieser Beitrag ist weniger interessant (20)
Das eben für 4 Boxen mit unterschiedlichen werden in den Klammern.

Nun sollt man von oben nach unten die ComboBoxen auswählen und nach jeder auswahl der ComboBox wird im TEdit Feld das Summiert.

Ich gehe mal davon aus das das ganze mit onChange auf dem Combobox Feld geht ?! Nur wie lade ich zur Laufzeit die Zahlen in den Klammern aus (10), (20) wie auch immer ...
Die Feldinhalte werden von einer Datenbank gesetzt. Es soll natürlich auch so sein das wenn ich ein Feld in der Datenbank z.B. von (20) auf (30) ändere, nicht das Programm neu Compilieren muss

Vielen dank für eure Vorschläge schonmal ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 14:38
Du könntest die Zahlen als Objekte in den Items der Comboboxen hinterlegen und jeder Combobox dasselbe OnChange-Ereignis zuweisen. Schnelles Beispiel (DoOnChange ist die Ereignisbehandlungsroutine aller Comboboxen):
Delphi-Quellcode:
//wird im OnChange der Comboboxen ausgeführt
procedure TFormBla.DoOnChange(Sender: TObject);
var Summe: integer;
begin
  Summe := 0;
  if ComboBox1.ItemIndex > -1 then
    Summe := Summe + integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);
  if ComboBox2.ItemIndex > -1 then
    Summe := Summe + integer(ComboBox2.Items.Objects[ComboBox2.ItemIndex]);
  if ComboBox3.ItemIndex > -1 then
    Summe := Summe + integer(ComboBox3.Items.Objects[ComboBox3.ItemIndex]);
  if ComboBox4.ItemIndex > -1 then
    Summe := Summe + integer(ComboBox4.Items.Objects[ComboBox4.ItemIndex]);
  Edit1.Text := inttostr(Summe);
end;

procedure TFormBla.FormCreate(Sender: TObject);
var i: integer;
begin
  //Zahlen als Objekte in den Items speichern
  for i := 1 to 4 do
    begin
      ComboBox1.Items.AddObject(Format('%d',[i * 10]),TObject(i*10));
      ComboBox2.Items.AddObject(Format('%d',[i * 10]),TObject(i*10));
      ComboBox3.Items.AddObject(Format('%d',[i * 10]),TObject(i*10));
      ComboBox4.Items.AddObject(Format('%d',[i * 10]),TObject(i*10));
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 14:42
Wenn du die Daten eh aus einer Datenbank liest, dann könntest du dir für jede Combobox ein array definieren, in dem die Werte gespeichert werden, z.B. so:

Delphi-Quellcode:
Werte1 : array[0..3] of integer;
Werte2 : array[0..3] of integer;
//...
Wobei die Länge jedes Arrays natürlich der Anzahl der verschiedenen Werte entsprechen muss (kann sich die Anzahl verändern, müsstest du auf dynamische Arrays zurückgreifen). Beim Lesen aus der Datenbank musst du dann halt neben den strings für für die Comboboxen auch die Werte in den Arrays setzen.

Beim OnChange-Ereignis der Comboboxen machst du dann noch folgendes:

Edit.Text := Werte1[ComboBox1.ItemIndex] + Werte2[ComboBox2.ItemIndex] + //... mfg
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
cobus_tschulz

Registriert seit: 31. Jan 2010
15 Beiträge
 
#4

Re: Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 15:01
Danke euch schonmal.

Problem dabei ist nur das ich NUR die Feldwerte in Laufzeit sprich mit Combobox1.Text auslesen kann und nicht manipulieren oder setzte kann.

Das ist ein SDK mit dem ich arbeite von dem Programm was verändert werden muss.

Also hier nochmal kurz:
Ich sezt in einer art Verwaltungskonsole die Feldwerde, diese werden in der Datenbank gespeichert.
Öffnet man die Form werden diese dagestellt.

Ich habe nur die MKöglichkeit dort den Feldwert wie oben gesagt mit xxx.Text auszulesen und dort dann nach '(' zu suchen die kommenden 2 Zahlen zu nehmen und zu summieren.

Etwas schwierig damit so ....
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 15:05
Dann solltest du dir mal die Funktion Hier im Forum suchenpos anschauen. Diese liefert die Stelle des ersten Vorkommens einen Substrings innerhalb eines anderen Strings. Mit Hilfe der Funktion kannst du also herausfinden, wo im String der Combobox die runde Klammer "(" auftaucht.
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
cobus_tschulz

Registriert seit: 31. Jan 2010
15 Beiträge
 
#6

Re: Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 19:40
öhm ist zwar gerade dumm aber ich bekomme nen Fehler wenn ich auf

strg := combobox1.text gehe

hier der Code ....

Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  Pos1 :string;
  SubStr :string;
  Summe: integer;
  Str: integer;
begin
Str := combobox1.Text;
Pos1 := Pos('(',Str);
SubStr := Copy(combobox1.Text,Pos1,2);
ShowMessage(SubStr);
end;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 20:58
Zitat von cobus_tschulz:
öhm ist zwar gerade dumm aber ich bekomme nen Fehler wenn ich auf

strg := combobox1.text gehe

hier der Code ....

Delphi-Quellcode:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  Pos1 :string;
  SubStr :string;
  Summe: integer;
  Str: integer;
begin
Str := combobox1.Text;
Pos1 := Pos('(',Str);
SubStr := Copy(combobox1.Text,Pos1,2);
ShowMessage(SubStr);
end;
Ein Text ist kein Integer, kann aber eine Zahl enhalten.

Delphi-Referenz durchsuchenStrToInt

Ich finde es auch ein wenig ungeschickt eine Integervariable str zu nennen.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Comboboxen Summieren bei onChange

  Alt 9. Feb 2010, 21:03
Wobei TryStrToInt() oder StrToIntDef() vorzuziehen wären
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz