Autor Beitrag
sexysith
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 07.11.08 13:50 
Hallo erstmal.
Ich bin neu hier ;-)
Ich lerne im Moment in der Schule Delphi und es macht mir Spaß damit ein wenig "rumzubasteln". So jetzt hab ich mal angefangen mir ein kleines Konzept zu erstellen für ein kleines Prgramm was ich machen möchte und hab da schonmal mit angefangen.
Es soll ein kleines Programm werden, womit die Fragen von Prüfungsbögen "Fahren lernen Klasse B" abgefragt werden. Beim Klick auf den jeweiligen Button vor der Antwort auf die Frage schaltet der von 'O' für nicht angekreutzt zu 'X' für angekreutzt um. Ein Button 'Abschicken' Kontrolliert das. Ist eins angekreutzt was falsch ist oder etwas vergessen wurde sollen 3 Fehlerpunkte in Form von 2-5 (je nach Frage) Roten Punkten Am Linken Rand entstehen. Danach der Abschiken Button ausgestellt werden und ein Button für Weiter erscheinen.
Soweit funtzt alles.
Jetzt geht es weiter diese Frage wurde Beantwortet und mit dem Klick auf weiter geht es zur nächsten.
Da tauchen die ersten Probleme auf. Das 2te Formular erschein Irgendwo auf dem Bildschirm. Hab versucht den Button 'weiter' so zu füttern:

ausblenden procedure TForm1.btwClick(Sender: TObject);
1:
2:
3:
4:
5:
6:
begin
form1.visible:=false;
form2.visible:=true;
form2.top:= //das gleiche wie form1;
form2.left:= //das gleiche wie form1;
end;


Aber auch das hat nicht so funktinoniert.
Mach ich vielleicht einen Fehler mit dem 2ten Formular? Also das kein 2tes von nöten ist sondern das ich das irgendiwe anders machen kann? Weil das 2te Formular "ploppt" auf wie ein neues Fenster, was wohl daran liegt das es eins ist^^

Das nächste Problem ist, das ich es kaum schaffe die Fehlerpunkte, die ich bei der 1 Frage habe auf das 2te Formular zu übertragen. Mein versuch hier war den weiter Button so zu ändern:

ausblenden procedure TForm1.btwClick(Sender: TObject);
1:
2:
3:
4:
5:
6:
7:
8:
9:
begin
form1.visible:=false;
form2.visible:=true;
form2.top:= //das gleiche wie form1;
form2.left:= //das gleiche wie form1
form2.p1.visible:=true;
form2.p2.visible:=true:           //----> p1,p2,p3 sind jeweils kleine rote Punkte.
form2.p3.visible:=true;
end;

Aber da scheitere ich daran, das ich anscheinend den falschen Befehl verwände. Oder geht das gar nicht? Vielleicht mache ich auch hier wieder den Fehler ein neues Formular zu erstellen.


Im moment habe ich das dann so gelöst:
Wenn ein Fehler bei Frage 1 gemacht wird, so wird die caption von form 1 und 2 zu 'Fahrschule 3 Fehlerpunkte' geändert. Und mit einem Großen 'Start' Button bei Frage 2 werden die 3 Roten Punkte für die Fehler aus der 1 Frage aktiviert, wenn die caption von Formular 2 'Fahrschule 3 Fehlerpunkte' ist.
Das kann natürlich nicht so weiter gehen, wenn mehr als 30 Fragen, wie sie auf einem Bogen nunmal vorhanden sind, bearbeitet werden müssen.


Die Fehlerpunkteazeige mit den Roten Punkten möchste ich noch ändern, so dass am Ende, wenn alle Fragen bearbeitet wurden die Gesammt Zahl angezeigt wird. Ich weis auch schon in etwa wie ich das mache, stehe aber wieder vor dem Problem "Formularübergreifend" arbeiten zu müssen.

Der Reset Button und der Zurück Butten sollen später auch wieder rausgenommen werden. Sin imo nur da weil ich am anfang noch keine 2te Frage eingefügt hatte und ich da Programm nur im ersten Formular beenden konnte. Aber jetzt hab ichs geschafft mir nen 'Close' Button zu bauen *stolz*^^

Ich bedanke mich schonmal für jede Hilfe, die man mir geben kann. Ich hab in der Suchfunktion schonmal geguckt aber nichts gefunden. Vielleicht auch weil ich irgendiwe keinen passenden Begriff dafür habe^^ Habs versucht mit Formular und neues Forumular etc aber da kamen so viele sachen aber nicht das was ich gesucht habe.

Hoffe das hier ist der richtige Berreich.


Zuletzt bearbeitet von sexysith am Fr 07.11.08 15:30, insgesamt 3-mal bearbeitet
sexysith Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 07.11.08 13:51 
Hier noch das Programm im Anhang.
Einloggen, um Attachments anzusehen!
Mike19
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 256

Win XP, Vista, Win 7
Delphi 2005, Turbo Delphi
BeitragVerfasst: Fr 07.11.08 14:46 
Hallo, und willkommen hier im DF :welcome: .

Du hast ja Dein Vorhaben schon mal gut beschrieben. Wer soll aber eine EXE Datei herunterladen ? Ich wird es nicht tun.

Stell doch bitte mal deinen Code zur Verfügung, dann wird sicherlich einer mal Zeit haben, den durchzugehen. Wenn Du Code direkt in Deinem Beitrag darstellst, verwende bitte die Delphi Tags.

Gruss Michael
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 07.11.08 15:29 
Erstens kannst du ein TPageControl nehmen und dieses umblättern, dann brauchst du nicht so viele Formulare (die Umschalter für die Seiten oben kannst du ausblenden).
Zweitens kannst du aber auch in einem Formular die Eigenschaft Position im Objektinspektor auf OwnerFormCenter setzen, dann ist das automatisch an der selben Position.
sexysith Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 07.11.08 15:33 
Also, ich habe meinen Obingen Beitrag mal editiert.
Ich will niemanden von euch verseuchen, die Exe ist sauber, kann euch aber verstehen. Was meinst du mit den Code zur verfügung stellen?
Die Datein die Delphi ausspuckt?
Oder einfach so?

ausblenden volle Höhe Programm
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:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
unit u1frage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    bt1: TBitBtn;
    bt2: TBitBtn;
    bt3: TBitBtn;
    p1: TImage;
    p2: TImage;
    p3: TImage;
    bta: TBitBtn;
    bt4: TBitBtn;
    Fehlerpunkte: TStaticText;
    btw: TBitBtn;
    bts: TBitBtn;
    procedure bt1Click(Sender: TObject);
    procedure bt2Click(Sender: TObject);
    procedure bt3Click(Sender: TObject);
    procedure btaClick(Sender: TObject);
    procedure bt4Click(Sender: TObject);
    procedure btwClick(Sender: TObject);
    procedure btsClick(Sender: TObject);
  
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.bt1Click(Sender: TObject);
begin
if bt1.caption= 'O'
then
bt1.caption:= 'X'
else
bt1.caption:= 'O'
end;

procedure TForm1.bt2Click(Sender: TObject);
begin
if bt2.caption= 'O'
then
bt2.caption:= 'X'
else
bt2.caption:= 'O'
end;

procedure TForm1.bt3Click(Sender: TObject);
begin
if bt3.caption= 'O'
then
bt3.caption:= 'X'
else
bt3.caption:= 'O'
end;

procedure TForm1.btaClick(Sender: TObject);
begin
If bt1.caption= 'X'
then if bt2.Caption= 'X'
        then begin
                p1.visible:=true;
                p2.Visible:=true;
                p3.Visible:=true;
                bt4.visible:=true;
                form1.caption:='Fühererschein 3 Fehlerpunkte'
                end
        else if bt3.caption= 'X'
                then begin
                        p1.visible:=true;
                        p2.Visible:=true;
                        p3.Visible:=true;
                        bt4.visible:=true;
                        form1.caption:='Fühererschein 3 Fehlerpunkte'
                        end
                else begin
                bt4.Visible:=true
                end
else begin
p1.visible:=true;
p2.Visible:=true;
p3.Visible:=true;
bt4.visible:=true;
form1.caption:='Fühererschein 3 Fehlerpunkte'
end;
bta.Enabled:=false;
btw.Enabled:=true
end;

procedure TForm1.bt4Click(Sender: TObject);
begin
bt1.caption:= '0';
bt2.Caption:= '0';
bt3.caption:= '0';
bt4.visible:=false;
p1.visible:=false;
p2.Visible:=false;
p3.visible:=false;
bta.Enabled:=true
end;


procedure TForm1.btwClick(Sender: TObject);
begin
form1.visible:=false;
form2.visible:=true;
if p1.visible= true
        then begin
                form2.caption:='Fühererschein 3 Fehlerpunkte'
                end
end;






procedure TForm1.btsClick(Sender: TObject);
begin
bts.visible:=false;
end;
sexysith Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 07.11.08 15:37 
Hey, danke schonmal für die Antowrten.
Was ist ein TPageControl ? Und wie benutz ich das?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 07.11.08 15:39 
Aufs Formular legen und oben auf dem Umschalter mit Rechtsklick und dem Kontextmenü neue Seiten anlegen. Mit ActivePageIndex (oder so ähnlich) kannst du per Code dann die aktuelle Seite setzen. Und mit TabVisible (oder so ähnlich) stellst du ein ob eine Seite oben einen umschalter haben soll (bei dir ja nicht).
Die Buttons kannst du dann unterhalb des PageControls haben um diese allgemein zu benutzen oder du kannst sie auf jede Seite setzen, was den Code zwar stark aufbläht, aber für den Anfang einfacher macht.
sexysith Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 07.11.08 16:52 
Der Tipp is super, hab das jetzt soweit geschafft. Nur eins is etwas blöd. Ich müsste dann ja bei ca 30 fragen à 3 Antworten 90 Buttons machen.
Jetzt könnte man die buttons ja wie du sagtest da drunter machen und öfter benutzen. Jetzt gibts dann aber das problem das ich ja zb dann für Frage 1 sage.


if bt1.caption= 'X'
then ...

Das gleiche dann ja auch wieder für Frage 2 usw.

dann fragt der das doch in jedem Tab ab oder? Kann ich das begrenzen?
Oder ist es am einfachsten wenn der weiter Button das einfach wider umstellt. Was dann aber auch widerum ein Problem mit dem auszählen der Punkte am Ende geben würde.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Fr 07.11.08 17:04 
Mach doch einfach für die Fragen eine Datei ala
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type tanswer = (a_, b_, c_);
type tr1=record
  caption, question, answer1, answer2, answer3: shortstring;
  lösung: set of Tanswer
  end;
[...]

var f: file of trl;


oder zumindest konstanten dieser Form.
Dann brauchst du im Button-click diese nur noch auswerten...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 07.11.08 17:38 
Grundsätzlich ist erstmal die Frage ob deine Fragen und Antworten wirklich so verschieden ist, dass du da einzelne Seiten brauchst. Kannst du nicht einfach die Texte ändern?

Wenn du mehrere gleichartige Köpfe oder andere Komponenten ansprechen willst kannst du auch FindComponent benutzen um die Komponenten über ihren Namen anzusprechen. Zudem solltest du die jeweils richtigen Antworten entweder per Tag-Eigenschaft einer der Komponenten der jeweiligen Seite signalisieren oder wie bereits gesagt gleich alle Fragen und Antworten in einer Datei speichern.
sexysith Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 07.11.08 17:58 
Also ich hab bei insg. 30 Fragen 10 verschiedene Lösungsformen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 07.11.08 18:16 
Dann sollte sich das doch zusammenfassen lassen.

Hier habe ich demonstriert wie grundsätzlich so ein Umblättern geht:
www.delphi-forum.de/....php?p=403690#403690
In diesem Fall sind die Fragen und Antworten im Programm, besser wäre natürlich eine externe Lösung.