Combobox

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Combobox

Beitrag von TheBeer »

Hallo an alle ich hab da eine kleine Frage zur Combobox.

Nachdem ich mir nun bei google 2h ein paar Beiträge überall mal durch gelesen habe bin ich zwar mit dem Erstellen von einträgen in der Combobox vertraut aber noch steht am Anfang ein großen Fragezeichen.


Eigentlich ist es ganz einach. Ich möchte z.b. folgende Einträge in der Combobox auswählen:

z.b. Metallmine 26
Metallmine27
Metallmine28
Metallmine29
usw.


Dazu zu jeder Mine besteht natürlich ein Wert mit dem ich dann natürlich weiter rechnen will und hier ist mein Problem, bestimmt ganz simpel aber ich komm nicht drauf.
Also der Name so wie hier soll in der Combobox ausgewählt werden beispielsweise Metallmine26 = 25000

ich will dann im nächsten Edit mit der 25000 weiter rechnen und da kommt der fehler der nimmt die Metallmine26 und wirft mir natürlich ein Fehler vor die Nase.

vielleicht kann mir ja von euch einer helfen. Hoffe ich hab nicht nur irgendwo ne Klammer vergessen oder es irgendwo falsch hin geschrieben

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Combobox

Beitrag von Komoluna »

Wenn sich aus der Minennummer der Wert berechnen lässt ist das doch ganz einfach, z.B:

Code: Alles auswählen

Wert := (Combobox1.ItemIndex + 1) * 10000; //oder irgendeine andere Formel
Wenn nicht, dann nimm ein statisches oder dynamisches Array, mit der selben Länge wie Items in deiner Combobox sind und nimm das als Lookuptable:

Code: Alles auswählen

Wertarray: array of Integer;
//oder
Wertearray: array [0..<Hier anzahl deiner minen -1 eintragen>] of integer;

Code: Alles auswählen

if Combobox1.ItemIndex>-1 then
  Wert := Wertarray[Combobox1.ItemIndex];
EDIT: Ich gehe in meinen Beispielen davon aus, dass das erste Element deiner Combobox Metallmine 1 heißt.

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Combobox

Beitrag von TheBeer »

Danke erst einmal für deine schnelle Antwort,

Nein ich hab mit Metallmine 25 angefangen da es darunter eigentlich kein Sinn macht.

Ich habe unten mal das alte Programm angefügt, so wie es da unten ist soll es wieder werden nur mit mehr Edit Fenster z.b. Wo man die Uhrzeit vom Spionagebericht eingeben kann und es soll dann automatisch die Uhrzeit zurück Rechnen. Und noch ein paar andere Erweiterungen.

Ich habe dieses Tool damals für den Unterricht erstellt, da es halt mit Ogame was ich damals aktiv gespielt habe zusammen hing. Nur seit dem hab ich die Combobox nicht einmal mehr angerüht und auch den Quellcode von dem Tool nicht mehr. Muss also wieder bei 0 anfangen.
Dateianhänge
save.exe
Altes Programm
(388 KiB) 64-mal heruntergeladen

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Combobox

Beitrag von Komoluna »

"Uhrzeit vom Spionagebericht"?

sry, aber ich kenn das spiel nicht. Was genau soll passieren?

Du hast einen Wert von 25-35 (Minenlevel) und einen beliebig großen(Rohstoffmenge).

Gibt es eine Formel, wo

Code: Alles auswählen

T(x) = <irgendwas mit m und x> 
?

Da deine Minen bei 25 Anfangen nimm doch einfach

Code: Alles auswählen

m := Combobox1.ItemIndex + 25;
ItemIndex(Mine 25) = 0

Dann einfach

Code: Alles auswählen

Wert := CalcTimeFor(m, Inttostr(Edit1.Text));
Falls dem nicht so ist, dann brauchen wir wohl mehr infos... (wie kommt man denn von Minenlevel und Rohstoffmenge auf den Zeitwert?)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Combobox

Beitrag von TheBeer »

Also zum Beispiel Metallmine 25 hat eine Produktion von 8.641 Metall / Stunde

im Edit was du da siehst gibst du dann die Metallmenge ein die auf dem Fremden Planeten liegt. z.b. 251839 dann kommt bei Zeit raus: 1Tage 5h 8min 41sec


und genau das soll es auch machen. Ich weiß noch in etwa das ich damals jeden Eintrag in der Combobox einen Wert ( in dem Falle 8641) zu gewiesen habe. Weiß nur nicht mehr wie :D das ist mein Problem

Also mehr will ich eigentlich auch gar nicht. Wenn ich oder einer meiner Mitspieler in der Combobox z.b. die Metallmine 25 auswählt und dann im Edit 1 251839 eingibt soll er also 251839/8641 rechnen und das dann halt in Tage/Min/Stunden/Sekunden ausgeben.

Entschuldigung schon einmal ich kann mich immer nicht so richtig ausdrücken aber hoffe du versteht ungefair was ich meine.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Combobox

Beitrag von Komoluna »

Dann würde ich ein statisches array nehmen:

Code: Alles auswählen

Werte: array [0..19] of single = (8.641,...); //Achte drauf, dass du exakt 20 werte einträgst, sonst kompiliert das nicht

Code: Alles auswählen

t := Inttostr(Edit1.Text) / Werte(Combobox1.ItemIndex);
(oder so)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Combobox

Beitrag von TheBeer »

danke für deine Hilfe ich werde das nachher mal ausprobieren

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Combobox

Beitrag von TheBeer »

hmm ich bin zu blöd dafür und auch anscheinend zu lang raus um mit arrays zu arbeiten. Hab kp wo ich das jetzt eintrage. Hatte es unter den globalen Variablen aber der spuckt mir immer etwas mit LongInt als fehler aus.


Sagt mal kann man auch alles einzeln deklarieren?

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
var
 
begin
  ComboBox1.Items.AddObject('Metallmine 24', TObject(1));
  ComboBox1.Items.AddObject('Metallmine 25', TObject(2));
  ComboBox1.Items.AddObject('Metallmine 26', TObject(3));
  ComboBox1.Items.AddObject('Metallmine 27', TObject(4));
  ComboBox1.Items.AddObject('Metallmine 28', TObject(5));
  ComboBox1.Items.AddObject('Metallmine 29', TObject(6));
  ComboBox1.Items.AddObject('Metallmine 30', TObject(7));
  ComboBox1.Items.AddObject('Metallmine 31', TObject(8));
  ComboBox1.Items.AddObject('Metallmine 32', TObject(9));
  ComboBox1.Items.AddObject('Metallmine 33', TObject(10));
  ComboBox1.Items.AddObject('Metallmine 34', TObject(11));
  ComboBox1.Items.AddObject('Metallmine 35', TObject(12));
end;                                                       


Für jede Metallmine die ausgewählt wird brauch ich eine Zahl bzw ein Wert um damit dann beim Buttonklick in Edit 1 und Edit 2 weiter zu rechnen. Irgendwie bekomm ich das mit dem array nicht hin.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Combobox

Beitrag von Komoluna »

TheBeer hat geschrieben:hmm ich bin zu blöd dafür und auch anscheinend zu lang raus um mit arrays zu arbeiten. Hab kp wo ich das jetzt eintrage. Hatte es unter den globalen Variablen aber der spuckt mir immer etwas mit LongInt als fehler aus.
Poste doch mal die Fehlermeldung, dann können wir dir sicher helfen ;-)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

TheBeer
Beiträge: 22
Registriert: Sa 30. Aug 2014, 19:33

Re: Combobox

Beitrag von TheBeer »

Note: Local variable "ress" is assigned but never used

das mit zu langen Integer hab ich selbst verschuldet ^^ hatte leider ein Wert zu viel eingegeben aber nun kommt das bei dem array wie gesagt hab das array global geschrieben oder muss das woanders hin? Berechnen tue ich wie in dem alten Tool mittels ein Button

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Combobox

Beitrag von hde »

TheBeer hat geschrieben:Note: Local variable "ress" is assigned but never used
Das ist ein Hinweis, aber doch kein Fehler der das Compilen verhindert oder zur Laufzeit kommt.
Falls der Hinweis stimmt, lass dioe Variable ress doch weg.

Antworten