| Autor |
Beitrag |
Selon
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 17.03.09 10:03
Hallo zusammen,
meine Delphi programmierkünste liegen schon ein paar Jahre zurück, so 2000 hab ich in meiner Ausbildung Pascal, Delphi u. C bzw. C++ gelernt, leider sind meine Fähigkeiten etwas eingerostet und ich muss des öfteren im Web googlen, dabei bin ich auf diese schöne Community gestoßen.
So nun zu mein Problem,
Wie ihr aus dem Topic entnehmen könnt bin ich gerade dabei ein Psychotherapeuten Test zu programmieren, mein problem besteht bzw. meine Sorgen bestehen nun darin, wie ich das am besten realisieren kann. Der Test besteht aus 36 Fragen, die Fragen werden mit einer Beurteilung über eine Gefühlsskala abgefragt.
Z.b Meine Situation am Arbeitsplatz hat stark bei der Herausbildung meiner Berschwerden mitgewirkt [ ] 1 [ ]2 [ ]3 [ ]5 [ ]6 <- ankreuzen
So diese Angaben wollte ich mit Radionbutton erfassen , wären dann ja 36*6 = 216 Radiobuttons und noch die dazu gehörigen Variablen in welchen der Wert gespeichert wird, weil ich diese dann Statistik in form einer Graphic darstellen will.
So, könnte man das vielleicht auch noch anders lösen? Mach mir ein bisschen sorgen um den Speicherbedarf vom Stack.
Schonmal danke über jede guten Ratschlag.... ich hoffe ich stelle mich nicht all zu dumm an, ich bin schon etliche Jahre aus der Materie draußen.
Gruss
Sebastian.
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Di 17.03.09 10:28
Hi
Nimm nicht Radiobutton, sondern RadioGroup.
Für jede Frage eine Group mit 6 ( oder mehr ) Items. Dadurch verhinderst du automatisch eine Mehrfachselektion und erhälst über Itemindex einen eindeutigen Wert. Also auch nur Werte entsprechend der Anzahl der Fragen und nicht der Radiobuttons.
Ach ja, der Stack.... ich glaub, da brauchst du dir nicht wirklich sorgen drum machen es sei denn, du programmierst folgenden Code..
Delphi-Quelltext 1: 2: 3: 4:
| Procedure Stack_Test; Begin Stack_Test; end; |
und im Hauptprogramm
Delphi-Quelltext 1: 2: 3:
| ... Stack_Test; .... |
_________________ Zier dich nich so, ich krieg dich schon....
|
|
Selon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 17.03.09 11:10
Danke erstmal für dein Tip, habs mir gerade mal angeschaut... ich denke ich werde diese Lösung bevorzugen und dann die Radiogroup mit einer Case Of ansprechen, allerdings was ich gern noch wüsste kann man "buttons" auch vertikal ausrichten und nicht nur horizental, im moment stehen sie untereinander würde sie gerne nebeneinander haben.
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Di 17.03.09 11:22
das geht mit 'Columns' in den Einstellungen zur Radiogroup
(bei 6 Fragen -> 6 Columns sollte dein gewünschtes Ergebnis bringen)
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Selon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Di 17.03.09 11:40
Super Sache, danke. Werd mich wohl noch mal melden, wenn ich das alles grafikisch darstellen muss  , da schwirren mir auch noch paar Probleme im Kopf rum.
|
|
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.03.09 15:25
So wie ich den Test kenne , ist der sehr ungenau.Ich hatte dem Psychologen beschrieben wie es mir ging , nach meiner Krebserkrankung. Und dann haben wir den Test gemacht und nachdem gings mir eigentlich ganz normal. 
|
|
Selon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 18.03.09 10:12
weisst du die genaue Bezeichnung des tests, gibt ja viele von den Dinger.
|
|
Selon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 19.03.09 20:11
Hallo, also ich stell mich irgendwie doof an.
Bin gerade dabei die RadioGroup Buttons zu programmieren und wollte diese mit einer Case of Schleife ansprechen.
Code schaut wie folgt aus
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.RadioGroup1Click(Sender: TObject); begin Case RadioGroup1.ItemIndex of 0: RadioGroup1:=1; 1: RadioGroup1:=2; 2: RadioGroup1:=3; 3: RadioGroup1:=4; 4: RadioGroup1:=5; 5: RadioGroup1:=6; end; end; |
end.
Fehlermeldung wäre : inkompatible Typen TRadioGroup und Intger..
Müsste doch so funktionieren, später wollte ich dann mit StrToInt umwandeln, damit ich mit den werten rechnen kann.
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Stundenplan
      
Beiträge: 128
Erhaltene Danke: 32
Win 7
Delphi 7 Pers., C# (VS 2010 Express)
|
Verfasst: Do 19.03.09 20:24
Hallo!
Was willst du der RadioGroup denn zuweisen?
Ihren ItemIndex-Wert oder wie??
Ansonsten stimmt alles:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.RadioGroup1Click(Sender: TObject); begin Case RadioGroup1.ItemIndex of 0: 1: 2: 3: 4: 5: end; |
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 19.03.09 20:27
erklär mal genau was du mit der zeile vor hast:
Delphi-Quelltext
P.S.: Kann es sein das du eine globale Variable namens Radiogroup1 hast? Das darf nämlich nicht sein.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Selon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 19.03.09 20:47
Also,
ich programmiere ein Test,
Dort werden Fragen gestellt welche du auf eine Skala von 1 bis 6 beantworten musst z. B.
1. Wenn ich mich körperlich nicht wohl fühle, dann habe ich mir das selbst zuschreiben [1] [2] [3] [4] [5] [6]
1 steht für "trifft sehr"
6 steht für "trifft gar nicht zu"
die Skala hab ich nun mit den RadioGroups realisiert.. also muss ich da nun den Buttons auch ein Wert zuweisen.. dies wollte ich mit der Case of Schleife..
wie oben in meinem Beispiel.
Später muss ich dann von bestimmten Fragen die Werte zusammen rechen, deswegen mein StrToInt... aber warum erhalte ich den Fehler inkompatible Type?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 19.03.09 20:50
k, schau mal ob du irgendwo in deinem Quelltext folgendes stehen hast:
Delphi-Quelltext
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Selon 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 19.03.09 20:54
so, hab testweise nochmal eine neues formular eröffnet und
ein RadioGroup reingehaun mit 2 Buttons 1 und 2 .. das selbe nochmal programmiert, kopiere jetzt mal den kompletten Code der Unit1.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) RadioGroup1: TRadioGroup; procedure RadioGroup1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.RadioGroup1Click(Sender: TObject); begin Case RadioGroup1.ItemIndex of 0: RadioGroup1:= 1; 1: RadioGroup1:= 2; end; end;
end. |
Fehlermeldung ist die Selbe..
[Fehler] Unit1.pas(29): Inkompatible Typen: 'TRadioGroup' und 'Integer'
[Fehler] Unit1.pas(30): Inkompatible Typen: 'TRadioGroup' und 'Integer'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Stundenplan
      
Beiträge: 128
Erhaltene Danke: 32
Win 7
Delphi 7 Pers., C# (VS 2010 Express)
|
Verfasst: Do 19.03.09 21:00
Oder vielleicht willst du den Groups die ItemIndex-Werte zuweisen?
1. Geht nicht! Nimm dann RadioGroup1.ItemIndex := 1;
2. Passiert automatisch! Brauchst nicht in die Click-Methode reinschreiben!!
Wo kriegst du denn den ItemIndex fürs Case-Of her?
Wenn du's dann zusammenzählen willst, nimm die ItemIndexe:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.FertigButtonClick(Sender: TObject); begin ZusammengezaehlterWert: RadioGroup1.ItemIndex + Radiogroup2.ItemIndex + ... end; |
//EDIT: Schreib deinen Code in Delphi-Tags:
Gehe auf Bereiche und klick auf das Plus-Symbol!
|
|
oldmax
      
Beiträge: 380
D3 Prof, D4 Prof
|
Verfasst: Fr 20.03.09 08:28
Hi
Nun mal langsam, Zuweisungen an den ItemIndex machen keinen Sinn.
Wenn du eine Radiogroup hast mit einer Anzahl von Items, dann ist Radiogroup1.ItemIndex der Zeiger auf das RadioButton in der Group. Ist kein Button gesetzt, dann ist auch RadioGroup1.ItemIndex -1, also nicht 0. 0 zeigt auf den ersten Index in der Liste.
Willst du nun eine Auswertung machen, dann kannst du auch direkt auf diesen Wert zugreifen, das heißt, es ist der Wert ItemIndex, der einem angeklickten Raiobutton entspricht und er ist gültig, wenn er >= 0 ist. Du brauchst also erst mal nicht unbedingt eine Variable. Möchtest du diese Werte abspeichern, bietet sich ein Array mit der Anzahl deiner RadioGroups, nicht der RadioButtons, an, in welches du den ItemIndex beim Anklicken einträgst.
also mal angenommen, du hast 32 Fragen und auch 32 RadioGroups dann brauchst du ein Array mit der Größe 32, z.B.
Delphi-Quelltext 1:
| Antwortwert: Array[1..32] of Integer; |
Nun kannst du in den OnClick-Ereignissmethoden eintragen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Procedure TMyForm.RadioGroup1Click(Sender: TObject); Begin Antwortwert[1]:=RadioGroup1.ItemIndex; end;
Procedure TMyForm.RadioGroup2Click(Sender: TObject); Begin Antwortwert[2]:=RadioGroup2.ItemIndex; end;
etc. |
Ist in der Form etwas langweilig, daher könnte man den Namen der RadioGroup ändern in z.b. 'MeineAntwort_01', 'MeineAntwort_02',... 'MeineAntwort_32'
Nun ist nur noch eine On_Click-Ereignismethode nötig.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Procedure TMyForm.MeineAntwort_01Click(Sender: TObject); Var Index : Integer; xPos : Integer; Referenz : String; Begin Referenz:=Sender.Name; xPos:=Pos('_'; Referenz); If xPos>0 then Begin Index:=StrToInt(Copy(Referenz, xPos+1,Length(Referenz)-xPos)); Antwortwert[Index]:=RadioGroup1.ItemIndex; end; end; |
Diese Ereignismethode schreibst du in alle OnClick-Ereignise im Objektinspektor. Bei deiner Auswertung hast du dann ein Array, welches in einer Schleife abgearbeitet werden kann.
Gruß oldmax
_________________ Zier dich nich so, ich krieg dich schon....
|
|