Zwei Werte aus Buttons entnehmen
-
Hallo
headerdatei hab ich och nie gmacht, also hab ich einfach mal die Variablen Status und Wert1 global deklariert.
Konstruktor hatte ich auch nie, also ebenfalls global auf 0 gesetzt (bereits in der deklaration)
Damit solltest du dich aber bald beschäftigen, den ohne die Grundlagen von OOP kommst du im Builder nicht weit.
eine frage hab ich noch: kann ich die speicherung der werte auch in eine extra funktion machen? weil wenn ich die 2 bedingungen jeweils pro button schreibe, wird das extrem unübersichtlich für 38 buttons ^^
Mein Beispielcode ist bereits darauf ausgelegt, das nur genau eine OnClick-Methode für alle Buttons verwendet wird. Alles was du noch tun must ist in der OnClick-methode den Button zu identizifizeren und dementsprechend den Wert aus dem Array EN auswählen. Dazu kannst du am einfachsten die Tag-Eigenschaft der Buttons verwenden. Wie das genau geht steht in der FAQ, Abschnitt Komponenten benutzen.
bis bald
akari
-
naja ich hatte es in der Schule noch nicht, also muss ich es nicht können

ich versteh es immernoch nicht trotz FAQ, geht das nicht mit einer funktion, die ich bei jedem button reinschreibe, dass die ausführt werden soll und jeweils den ENwert übergibt?
-
Mach Dir eine Klasse die bei ButtonClick ausgelöst wird und eine Kennung des Button bekommt:
void __fastcall TForm1::ButtonIndex(int row,int col) { DeineSpeicherVariable=EN[row][col]; //was hier sonst noch passieren soll.. }Im Header mußt Du die Klasse angeben:
__published: // Von der IDE verwaltete Komponenten void __fastcall ButtonIndex(int row,int col);und dann jedem Button den Index row und column mitgeben:
z.B.void __fastcall TForm1::Button1Click(TObject *Sender) { ButtonIndex(2,3); }Gruß myerscola
-
ButtonIndex ist keine Klasse, sondern nur eine Memberfunktion deiner Formklasse.
-
ok die Verwirrung ist nun perfekt ^^
gibt es nichts einfacher mit der form, dass ich bei jedem button OnClick z.b. enspeicherung(EN[..][..]);
schreibe und dann die speicherung in ne extra funktion?
wie gesagt hatte bis jetzt nur einfache funktionen wie berechnungen, eingaben,ausgaben,arrays, if und schleifen
-
Hallo
@ myerscola : Das ist Quatsch, dann braucht man ja wieder für jeden Button eine Methode.
@dragon1990 : Das Prinzip Viele Buttons - Eine Eventmethode habe ich doch schon im meinem letzten Post erklärt. "Versteh ich nicht" ist aber nicht hilfreich für uns.
bis bald
akari
-
ich geh mal davon aus du meinst diesen Thread:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39210.html
da steht folgender Befehl:
dynamic_cast<TButton*>(Sender)->Name
Problem: ich weiss weder was mit Sender, noch mit Name gemeint ist, und ob der rest so bleibt oder auch inviduell angepasst werden muss
-
Hallo
ich weiss weder was mit Sender
Dann schau dir mal die Parameter des OnClick-Events an
noch mit Name gemeint ist
Schau dir mal die Eigenschaften eines TButton an.
oder auch inviduell angepasst werden muss
Ja du must das anpassen. Denn du willst nicht den Namen sondern den Tag des Buttons
bis bald
akari
-
wie gesagt wie sind noch nicht sehr in die tiefe gegangen.. OnClick-Events nicht wirklich besprochen sondern nur benutzt
Eigenschaften hat ein Button ja viele
Tag steht bei jedem Button irgendwie 0..
-
Hallo
Du sollst ja auch die Tag-Eigenschaft der Buttons zur Entwurfszeit auf einen entsprechenden, eindeutigen Wert setzen so das du zur Laufzeit mit dem Auslesen der Tag-Eigenschaft herausfinden kannst welcher Button den OnClick-Event ausgelöst hat.
Nimms mir nicht übel aber du hast einen schlechten Lehrer. Einen Anfanger gleich mit OOP-GUIs arbeiten zu lassen ist ungefähr so wie einen Nichtschwimmer bei Sturm ins Meer zu werfen.
bis bald
akari
-
habs jetzt doch geschafft selbst zu lösen, 2 Fragen hab ich noch
1. Frage:ich lese einige Werte aus Labels aus mit StrToFloat(Edit1->Text);
ich kenn den befehl noch StrToInt(Edit1->Text,0);
so dass, falls ein buchstabe eingegeben wird (was ja kein gültiger Integer wert ist), das Programm automatisch 0 einsetzt und es nicht abstürzt. Laut Hilfe gibt es das bei Float aber nicht mit ,0 .. gibt es das garnicht oder nur in einer anderen Form?2. Frage:
Kann ich die Anzahl von Dezimalen beschränken?
-
Hallo
dragon1990 schrieb:
habs jetzt doch geschafft selbst zu lösen, 2 Fragen hab ich noch
1. Frage:ich lese einige Werte aus Labels aus mit StrToFloat(Edit1->Text);
ich kenn den befehl noch StrToInt(Edit1->Text,0);
so dass, falls ein buchstabe eingegeben wird (was ja kein gültiger Integer wert ist), das Programm automatisch 0 einsetzt und es nicht abstürzt. Laut Hilfe gibt es das bei Float aber nicht mit ,0 .. gibt es das garnicht oder nur in einer anderen Form?Du meinst wohl StrToIntDef.
StrToFloatDef gibts ab dem BCB 6. In vorherigen Version must du mit StrToFloat und try-catch arbeiten2. Frage:
Kann ich die Anzahl von Dezimalen beschränken?
Mit float nicht. Das geht nur und ist auch nur bei Eingabe/Ausgabe sinnvoll.
Bei der Eingabe könntest du vor StrToFloat mit den passenden AnsiString-Methoden überprüfen wieviele Zeichen nach dem ',' kommen und entsprechend reagieren.
Bei der Ausgabe kannst du ein spezielles Ausgabeformat mit FloatToStrF und Konsorten angeben./Edit : Da das allerdings mit dem ursprünglichem Thema nichts mehr zu tun hat schließe ich hier. Wenn du nach dem sorgfältigem Lesen der BCB-Hilfe noch Fragen hast dann mach bitte einen neuen Thread auf.
bis bald
akari