Autor Beitrag
CindyN
Hält's aus hier
Beiträge: 9

WinXP
Delphi5
BeitragVerfasst: Fr 12.05.06 20:28 
Hallo,
wir haben letzte Woche ein Projekt in der Schule gestartet, an welchem ich im Moment arbeite und ich jetzt schon bei der Gestaltung vor dem ersten Problem stehe...
Ich habe ein Hauptprogramm, mittels RadioGroup soll jetzt die Möglichkeit gegeben werden zwischen vier Unterprogrammen zu wählen. Wie setzte ich das jetzt benutzerfreundlich um? Ich hab mir jetzt überlegt, dass der Benutzer das gewünschte Unterprogramm anklickt und dann mittels eines weiteren AuswahlButtons das Programm aufruft. Dafür muss ich dann wahrscheinlich mit IF RadioButton1 click, THEN blabla...
Wie setzte ich es aber um, dass das Unterprogramm sofort aufspringt sobald der Benutzer den RadioButton an sich markiert?
LG
Einloggen, um Attachments anzusehen!
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 12.05.06 20:36 
es muss nicht mit if gearbeitet werden ;)
nutz doch einfach case ... of :P


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure radiogroupClick(sender: TObject);
begin
 case radiogroup.itemindex of
  0begin
      Anweißung 1;
      Anweißung 2;
     end;
  
  1: Anweißung 3;
  2: ...

  end;
end;
CindyN Threadstarter
Hält's aus hier
Beiträge: 9

WinXP
Delphi5
BeitragVerfasst: Fr 12.05.06 20:46 
Okay danke,
wie lautet die Anweisung das Delphi dann aufs Unterprogramm zugreift? Ich bin auf neue Anwendung und hab dann das neue Formular gestaltet, welches noch Form2 heißt.
HTML ist da wesentlich einfacher in dem Punkt :/
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Fr 12.05.06 21:57 
als erstes musst du die "unit2" aus "form2" in die "unit1" von "form1" einbinden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  Form1: TForm1;

implementation
 uses unit2;
{$R *.dfm}


hast du das gemacht, kannst du die form mit form2.show oder form2.showmodal aufrufen ;)

Mfg
FFKangoroo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

WIN XP SP2
Delphi 7
BeitragVerfasst: Sa 13.05.06 11:56 
WAs auch viel toller rüberkommt und grafisch meiner meinung anch besser aussieht sind Tabs!. delphi hat die schon mit eingebunden. musst du mal suchen. (hab jetzt kein delphi vor mir) oder halt mit einer Menüleiste(Das ding oben mit Datei und so) und dann jeweils entweder eine neue form öffnen oder was auch noch gehen könnte(hab es aber nicht selber getestet und weiss auch nicht ob es funktioniert) wenn du objekte in groupboxes reintust und diese dann .visible:=true; machst. nach meienr logik her sollten bei visible= false auch die objects in der groupbox verschwinden und beim visible=true mit auftauchen. wie gesagt habs noch nicht getestet aber ein versuch ist es ja wert.(wird aber das erste sein was ich am montag zuhause machen werde ;) )

hoffe ich konnte helfen

FFKangoroo
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Sa 13.05.06 18:45 
Hi

Manchmal ist nicht das besser, was optisch gut aussieht, sondern wie die Aufgabenstellung lautet und das ist, wenn ich's richtig verstanden habe, der Aufruf von Unterprogrammen über Radiobuttons

Sorry, ich bin blind ( betrifft die Radiobuttons), laßt mich aber trotzdem erklären:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Radiobutton1.Caption:='Unterprogramm 1';
Radiobutton2.Caption:='Unterprogramm 2';
Radiobutton3.Caption:='Unterprogramm 3';
Radiobutton4.Caption:='Unterprogramm 4';
Radiobutton5.Caption:='Unterprogramm 5';


Am einfachsten ist der Aufruf von Unterprogrammen direkt über das OnClick- Ereignis der jeweiligen Radiobuttons. Nachteil: das Unterprogramm wird nur 1 mal Aufgerufen. Ein OnMouseDown erlaubt aber ein mehrfaches anklicken der Raiobuttons und somit einen erneuten Aufruf des Unterprogrammes.

Hier mal ein Beispiel zum Testen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.RadioButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Label1.Caption<>'UP1' then Label1.Caption:='UP1' else Label1.Caption:='doppelt';
end;


Der Text im Label wechselt zwischen UP1 und doppelt.

Damit nun mehrere Radiobuttons zusammenarbeiten, packt man sie in eine Groupbox. Delphi erkennt nun selbst, das diese Radiobuttons in einer Gruppe zusammengefaßt sind und läßt jeweils nur 1 selektiertes Button zu. Trotzdem ist der UP-Aufruf nach oben genannter Art möglich. Statt irgendeinen Text zu setzen, wird an dieser Stelle das UP aufgerufen.

Die letzte Möglichkeit ist eine RadioGroup, die das vorangegangene zusammen faßt und dem Ergebnis aus Radiobuttons und Groupbox sehr ähnlich ist. Hier ist aber das ereignis OnClick auf die RadioGroup bezogen und das Ergebnis eine Integerzahl, die du dann über eine Case-Anweisung verzweigen kannst.

Nehmen wir an:

Radiogroup.Itemindex = UP 1 ( liefert beim anclicken eine 0 )
Radiogroup.Itemindex = UP 2 (liefert .... 1 ) usw

Ein erneuter Aufruf des selben Unterprogrammes ist allerdings nur mit einem Kunstgriff möglich.

Am Ende der Routine Radiogroup.ItemIndexeine -1 zuweisen. Das hat allerdings den unschönen Nebeneffekt, das das selektierte Button (Item) die Selektion (Punkt) verliert.

So ungefähr sieht's dann aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.RadioGroup1Click(Sender: TObject);
Var x   : Integer;
begin
  x:= RadioGroup1.Itemindex;
  case x of
    0:    if Label1.Caption<>'UP1' then Label1.Caption:='UP1' else Label1.Caption:='doppelt';
    1:    if Label1.Caption<>'UP2' then Label1.Caption:='UP2' else Label1.Caption:='doppelt';
    2:    if Label1.Caption<>'UP3' then Label1.Caption:='UP3' else Label1.Caption:='doppelt';
  end ;
  RadioGroup1.Itemindex :=-1;
end;


Ach ja, Unterprogramme sind in der Regel Procedures und Functions. Ein öffnen einer anderen Form würde ich nicht unbedingt dazuzählen. Ich glaub auch nicht, das euer Unterrichtsstoff soweit ist, den Unterschied einer modalen oder nicht modalen Form erklärt zu haben.

Aber mit diesem Gerüst und der vorherigen Info dürftest du schon etwas weiter kommen.

Gruß oldmax

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt

_________________
Zier dich nich so, ich krieg dich schon....
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: So 14.05.06 22:18 
Moin :-)
Prinzipiell kann man das so machen
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:
procedure TForm1.RadioGroup1Click(Sender: TObject);
  var rgIndex: Integer;
begin
  rgIndex := RadioGroup1.ItemIndex;  //--angeklickter RadioButton
      case rgIndex of
        0begin
             Application.CreateForm(TForm2, Form2);
             Form2.Caption := RadioGroup1.Items[rgIndex];
             Form2.ShowModal;
             Form2.Free;
           end;
        1begin
             Application.CreateForm(TForm3, Form3);
             Form3.Caption := RadioGroup1.Items[rgIndex];
             Form3.ShowModal;
             Form3.Free;
           end;
        2begin
             Application.CreateForm(TForm4, Form4);
             Form4.Caption := RadioGroup1.Items[rgIndex];
             Form4.ShowModal;
             Form4.Free;
           end;
        3begin
             Application.CreateForm(TForm5, Form5);
             Form5.Caption := RadioGroup1.Items[rgIndex];
             Form5.ShowModal;
             Form5.Free;
           end;
      end;
      RadioGroup1.ItemIndex := -1;
end;

Für das Modale Erzeugen der Form2...Form4 müssen diese im Objektinspektor aus Visible := False gesetzt sein.
Die o.a. Prozedure macht folgendes: Index des geklickten RadioButton merken und je nach Index die entsprechende Form erstellen (CreateForm), die Fensterleiste(FormX.Caption) erhält den Titel des geklickten RadioButtons(RadioGroup1.Items[rgIndex]). Nach dem Schließen der Form wird diese wieder freigegeben(FormX.Free) und die RadioButtons werden deselektiert(Index auf -1 setzen).