Autor Beitrag
Selon
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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..

ausblenden Delphi-Quelltext
1:
2:
3:
4:
Procedure Stack_Test;
 Begin
   Stack_Test;
 end;


und im Hauptprogramm
ausblenden Delphi-Quelltext
1:
2:
3:
...
  Stack_Test;
 ....

_________________
Zier dich nich so, ich krieg dich schon....
Selon Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 18.03.09 10:12 
weisst du die genaue Bezeichnung des tests, gibt ja viele von den Dinger.
Selon Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
Stundenplan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 32

Win 7
Delphi 7 Pers., C# (VS 2010 Express)
BeitragVerfasst: Do 19.03.09 20:24 
Hallo!

Was willst du der RadioGroup denn zuweisen?
Ihren ItemIndex-Wert oder wie??

Ansonsten stimmt alles:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.RadioGroup1Click(Sender: TObject); 
begin 
Case RadioGroup1.ItemIndex of 
0//Anweisungen; 
1//Anweisungen;  
2//Anweisungen; 
3//Anweisungen; 
4//Anweisungen; 
5//Anweisungen; 
end;
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 19.03.09 20:27 
erklär mal genau was du mit der zeile vor hast:
ausblenden Delphi-Quelltext
1:
0: RadioGroup1:=1;					


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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 19.03.09 20:50 
k, schau mal ob du irgendwo in deinem Quelltext folgendes stehen hast:

ausblenden Delphi-Quelltext
1:
Radiogroup1: Integer;					


lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Selon Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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.
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 user profile iconNarses: Delphi-Tags hinzugefügt
Stundenplan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 32

Win 7
Delphi 7 Pers., C# (VS 2010 Express)
BeitragVerfasst: 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? :wink:
Wenn du's dann zusammenzählen willst, nimm die ItemIndexe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FertigButtonClick(Sender: TObject);
begin
ZusammengezaehlterWert: RadioGroup1.ItemIndex + Radiogroup2.ItemIndex + ...//Die anderen 
                                                                   //RadioGroups genauso!
//Auswertung
end;


//EDIT: Schreib deinen Code in Delphi-Tags:
Gehe auf Bereiche und klick auf das Plus-Symbol!
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
Antwortwert: Array[1..32of Integer;					

Nun kannst du in den OnClick-Ereignissmethoden eintragen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Procedure TMyForm.RadioGroup1Click(Sender: TObject);
Begin
  Antwortwert[1]:=RadioGroup1.ItemIndex; // beachte, der kleinste Wert ist 0
end;

Procedure TMyForm.RadioGroup2Click(Sender: TObject);
Begin
  Antwortwert[2]:=RadioGroup2.ItemIndex; // beachte, der kleinste Wert ist 0
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.

ausblenden 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;  // ein paar lokale Hilfsvariablen...
    xPos  : Integer;
    Referenz : String;
Begin
  Referenz:=Sender.Name;
  xPos:=Pos('_'; Referenz);
  If xPos>0 then // Namen von der Zahl abspalten....
  Begin
    Index:=StrToInt(Copy(Referenz, xPos+1,Length(Referenz)-xPos));
    // zugegeben, scheint etwas kompliziert zu sein, ist es aber nicht...
    Antwortwert[Index]:=RadioGroup1.ItemIndex; 
  end// evtl. über else - Zweig eine Meldung für ungültigen Index
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....