Delphi Hilfe

#1
Hallo ich bin neu hier und benötige Hilfe bei einem Delphi Projekt.
Ich würde gerne wissen wie man die Caption einer Radiogroup ändert.
Vielen Dank im voraus.
LG
 

Mat

Well-Known Member
c-b Experte
#2
Ich kenne mich mit Delphi leider nicht aus. In Lazarus kann man die Caption" direkt im Objektinspektor ändern.

upload_2017-5-6_17-18-50.png

Falls das aus irgendeinem Grund nicht geht, könntest du sonst auch die Formular-Datei mit VSCode/Notepad++ öffnen und verändern. Musst dann allerdings aufpassen, falls du aus Versehen die Eigenschaft "Name" veränderst. Dann muss das auch im Code angepasst werden.

Wenn du willst, dass die Caption während der Laufzeit verändert wird, musst du auf das Caption-Attribut zugreifen. Also zum Beispiel:
Delphi:
procedure TFormular.RdioJaChange(Sender: TObject);
begin
       RdioGruppe.Caption := 'Wahl: Ja';
end;

procedure TFormular.RdioNeinChange(Sender: TObject);
begin
   RdioGruppe.Caption := 'Wahl: Nein';
end;

procedure TFormular.RdioKAChange(Sender: TObject);
begin
  RdioGruppe.Caption := 'Wahl: Keine Ahnung';
end;
 
Zuletzt bearbeitet:
#3
ok danke dir.
ich arbeite gerade an einem Vokabeltrainer und würde gerne wissen wie die radiogroup 3 zufällige vokabeln auswählen kann.
ich habe einen button programmiert in dem man im edit 1 die deutsche und im edit 2 die englische vokabel eingibt und das programm diese automatisch speichert( mittels ini datei und listbox) nun möchte ich aber, dass die radiogroup aus diesen gespeicherten vokabeln 3 zufällige auswählt. kannst du mir da helfen bzw. weisst du wie das geht???


Quelltext:
Delphi:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, IniFiles, Unit2;

type
  TVokabeltrainer = class(TForm)
    radiogroup1: TRadioGroup;
    l_frage: TLabel;
    b_submit: TButton;
    b_next: TButton;
    l_checkup: TLabel;
    b_cheat: TButton;
    l_loesung: TEdit;
    l_antwort: TLabel;
    b_text: TButton;
    OpenDialog1: TOpenDialog;
    ListBox1: TListBox;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure b_nextClick(Sender: TObject);
    procedure b_submitClick(Sender: TObject);
    procedure b_cheatClick(Sender: TObject);
    procedure b_textClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
const
max=8;


var
  Vokabeltrainer: TVokabeltrainer;
  datei: TextFile;
  DateiName: string;
  a_vok: Array[1..max] of String;
  a_antwort: Array[1..max, 1..3] of String;
  a_richtig: Array[1..max] of Integer;
  nr: Integer;



implementation

{$R *.dfm}


procedure TVokabeltrainer.Button1Click(Sender: TObject);
begin
Form2.Show;
end;

procedure TVokabeltrainer.b_cheatClick(Sender: TObject);
begin
    l_checkup.Caption:='how about "' + a_antwort[nr, a_richtig[nr]] + '"?';
    l_checkup.Font.Color:=clblack;
    l_checkup.Font.Size:=10;
end;

procedure TVokabeltrainer.b_nextClick(Sender: TObject);
begin
      nr:=random(max)+1;
      l_frage.Caption:='Vokabel: ' + a_vok[nr];
      radiogroup1.Items[0]:=a_antwort[Nr, 1];
      radiogroup1.Items[1]:=a_antwort[Nr, 2];
      radiogroup1.Items[2]:=a_antwort[Nr, 3];
      radiogroup1.ItemIndex:=-1;
      l_checkup.Caption:='';
      l_loesung.Text:='';
end;

procedure TVokabeltrainer.b_submitClick(Sender: TObject);
begin
      If(Radiogroup1.ItemIndex=-1) and (l_loesung.Text='') then
      begin
            l_checkup.Caption:='Bitte eine Auswahl treffen';
            l_checkup.Font.Color:=clblack;
      end
      else
            If (Radiogroup1.itemindex=a_richtig[nr]-1) or (l_loesung.Text=a_antwort[nr, a_richtig[nr]] ) then
            begin
                l_checkup.Caption:='Richtig!';
                l_checkup.font.color:=clgreen;
            end
      else
            begin
                l_checkup.Caption:='Falsch!';
                l_checkup.Font.Color:=clred;
            end;
end;


procedure TVokabeltrainer.b_textClick(Sender: TObject);
begin
If radiogroup1.Visible=true then
  begin
    radiogroup1.Visible:=false;
    l_antwort.Visible:=true;
    l_loesung.visible:=true;
    b_submit.Visible:=false;
  end
  else
  begin
    radiogroup1.Visible:=true;
    l_antwort.Visible:=false;
    l_loesung.Visible:=false;
    b_submit.Visible:=true;

  end;
end;

procedure TVokabeltrainer.FormCreate(Sender: TObject);
var i,j: integer; Zeile: string;
ini :TIniFile;
box:TListBox;
begin
      box:=TListBox.Create(Self);
      box.Parent:= Vokabeltrainer;
      box.Visible:=false;
      ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) +'Vokabeln.ini');
      try
      ini.ReadSectionValues('DeutschEnglisch',box.Items);
      finally
      ini.Free;
      end;



      randomize;
      If OpenDialog1.execute then
      Dateiname:=opendialog1.filename
      else
          Dateiname:='voc.txt';
      AssignFile(Datei, DateiName);
      Reset(Datei);
      for i:=1 to Max do
      begin
            ReadLN (Datei, a_vok[i]);
            Readln (Datei, a_antwort[i,1]);
            Readln (Datei, a_antwort[i,2]);
            Readln (Datei, a_antwort[i,3]);
            readln (datei, zeile);
            a_richtig[i]:=strtoint(zeile);
      end;
      closefile(Datei);

      nr:=random(max)+1;
      l_frage.caption:='Vokabel: ' + a_vok[nr];

      radiogroup1.items[0]:=a_antwort[Nr, 1];
      radiogroup1.items[1]:=a_antwort[Nr, 2];
      radiogroup1.items[2]:=a_antwort[Nr, 3];
      radiogroup1.itemindex:=-1;


      end;

end.
 

Anhänge

Zuletzt bearbeitet von einem Moderator:

Mat

Well-Known Member
c-b Experte
#4
Bitte pack das in einen Codeblock, solange du deinen Beitrag noch bearbeiten kannst:

http://www.coding-board.de/threads/faq.33345/

Kannst ja Pascal aus der Liste auswählen und dann per Hand den Text verändern (eckige Klammern statt kleiner-größer):
Code:
// Vorher:
<code=pasca>blablablabal</code>

// Nachher:
<code=delphi>blablablabal</code>
 
#5
Pascal:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, IniFiles, Unit2;

type
  TVokabeltrainer = class(TForm)
    radiogroup1: TRadioGroup;
    l_frage: TLabel;
    b_submit: TButton;
    b_next: TButton;
    l_checkup: TLabel;
    b_cheat: TButton;
    l_loesung: TEdit;
    l_antwort: TLabel;
    b_text: TButton;
    OpenDialog1: TOpenDialog;
    ListBox1: TListBox;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure b_nextClick(Sender: TObject);
    procedure b_submitClick(Sender: TObject);
    procedure b_cheatClick(Sender: TObject);
    procedure b_textClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
const
max=8;


var
  Vokabeltrainer: TVokabeltrainer;
  datei: TextFile;
  DateiName: string;
  a_vok: Array[1..max] of String;
  a_antwort: Array[1..max, 1..3] of String;
  a_richtig: Array[1..max] of Integer;
  nr: Integer;



implementation

{$R *.dfm}


procedure TVokabeltrainer.Button1Click(Sender: TObject);
begin
Form2.Show;
end;

procedure TVokabeltrainer.b_cheatClick(Sender: TObject);
begin
    l_checkup.Caption:='how about "' + a_antwort[nr, a_richtig[nr]] + '"?';
    l_checkup.Font.Color:=clblack;
    l_checkup.Font.Size:=10;
end;

procedure TVokabeltrainer.b_nextClick(Sender: TObject);
begin
      nr:=random(max)+1;
      l_frage.Caption:='Vokabel: ' + a_vok[nr];
      radiogroup1.Items[0]:=a_antwort[Nr, 1];
      radiogroup1.Items[1]:=a_antwort[Nr, 2];
      radiogroup1.Items[2]:=a_antwort[Nr, 3];
      radiogroup1.ItemIndex:=-1;
      l_checkup.Caption:='';
      l_loesung.Text:='';
end;

procedure TVokabeltrainer.b_submitClick(Sender: TObject);
begin
      If(Radiogroup1.ItemIndex=-1) and (l_loesung.Text='') then
      begin
            l_checkup.Caption:='Bitte eine Auswahl treffen';
            l_checkup.Font.Color:=clblack;
      end
      else
            If (Radiogroup1.itemindex=a_richtig[nr]-1) or (l_loesung.Text=a_antwort[nr, a_richtig[nr]] ) then
            begin
                l_checkup.Caption:='Richtig!';
                l_checkup.font.color:=clgreen;
            end
      else
            begin
                l_checkup.Caption:='Falsch!';
                l_checkup.Font.Color:=clred;
            end;
end;


procedure TVokabeltrainer.b_textClick(Sender: TObject);
begin
If radiogroup1.Visible=true then
  begin
    radiogroup1.Visible:=false;
    l_antwort.Visible:=true;
    l_loesung.visible:=true;
    b_submit.Visible:=false;
  end
  else
  begin
    radiogroup1.Visible:=true;
    l_antwort.Visible:=false;
    l_loesung.Visible:=false;
    b_submit.Visible:=true;

  end;
end;

procedure TVokabeltrainer.FormCreate(Sender: TObject);
var i,j: integer; Zeile: string;
ini :TIniFile;
box:TListBox;
begin
      box:=TListBox.Create(Self);
      box.Parent:= Vokabeltrainer;
      box.Visible:=false;
      ini:=TIniFile.Create(ExtractFilePath(ParamStr(0)) +'Vokabeln.ini');
      try
      ini.ReadSectionValues('DeutschEnglisch',box.Items);
      finally
      ini.Free;
      end;



      randomize;
      If OpenDialog1.execute then
      Dateiname:=opendialog1.filename
      else
          Dateiname:='voc.txt';
      AssignFile(Datei, DateiName);
      Reset(Datei);
      for i:=1 to Max do
      begin
            ReadLN (Datei, a_vok[i]);
            Readln (Datei, a_antwort[i,1]);
            Readln (Datei, a_antwort[i,2]);
            Readln (Datei, a_antwort[i,3]);
            readln (datei, zeile);
            a_richtig[i]:=strtoint(zeile);
      end;
      closefile(Datei);

      nr:=random(max)+1;
      l_frage.caption:='Vokabel: ' + a_vok[nr];

      radiogroup1.items[0]:=a_antwort[Nr, 1];
      radiogroup1.items[1]:=a_antwort[Nr, 2];
      radiogroup1.items[2]:=a_antwort[Nr, 3];
      radiogroup1.itemindex:=-1;


      end;

end.
[ICODE][ICODE][/ICODE][/ICODE]
 

Mat

Well-Known Member
c-b Experte
#7
Hättest ruhig deinen vorigen Post editieren können statt den Code nochmal zu posten. ^^ Ich find's auf den ersten Blick natürlich verwirrend, weil du so viele Knöpfe hast. Ich müsste mir das Ding mal in Lazarus anschauen. Dafür wäre allerdings die Formular-Datei nicht schlecht. Aber ich kann nix versprechen, weil Delphi völlig andere Libraries verwendet. Das wird bei mir wahrscheinlich nicht laufen. Und ich möchte nur sehr ungern Delphi installieren, weil man sich dafür registrieren muss und ich eigentlich schon Lazarus habe.

Was noch helfen könnte, ist die Angabe, was genau nicht geht. Du hast ja schon eine Random-Funktion drin.

Ohne jetzt alles genau anzuschauen mal ein paar Ideen:
  1. Vokabeln aus der Ini-Datei in einen Array oder Record oder sowas laden
  2. Diese Vokabelliste anschließend mischen oder so lassen wie sie ist
  3. Wenn sie gemischt wurde, könntest du die obersten x variablen holen (x = 1 bis 3), je nachdem wie viele noch übrig sind, und die Position in einer Indexvariable speichern. Wäre so eine Art Möchtegern-Pop.
    1. Siehe auch: https://de.wikipedia.org/wiki/Stapelspeicher
  4. Wenn sie nicht gemischt wurde, kannst du auf zufällige Einträge zugreifen und notfalls in einem anderen Array abspeichern, welche Einträge schon erfolgreich geprüft wurden. Du könntest dann die Zufallszahl neu berechnen lassen, falls ein Eintrag schon genutzt wurde. Übrigens eine tolle Gelegeneit, um versehentlich eine Endlosschleife auszulösen ^^
  5. Diese Vokabelliste sollte nur 1 mal beim Öffnen des Abfrageformulars geladen werden, sonst hast du unnötig viele Dateizugriffe
  6. Abhängig von der Wahl deiner Lösung brauchst du eine Indexvariable oder einen Array mit abgefrühstückten Vokabeln
  7. Die zufällige Auswahl der RadioButton-Captions müsste 1 mal beim Öffnen der Form und dann jeweils bei jedem Seitenwechsel passieren (korrekter Submit oder Klick auf Next)
 
#10
Hallo ich bin neu hier und würde gerne wissen wie ich in Delphi die Radiogroup random Wörter aus einer ini datei annehmen lasse?
Danke im voraus
LG
 

Mat

Well-Known Member
c-b Experte
#12
Kannst die Datei ja mal mit nem Texteditor öffnen und gucken, ob da lesbare Zeichen stehen.

Wenn ja, dann kannst du die hier als Code einfügen, wenn nein, könntest du die Datei verpacken und hier anhängen, denke ich mal.
 
#13
Pascal:
object Vokabeltrainer: TVokabeltrainer
  Left = 0
  Top = 0
  Caption = 'Vokabeltrainer'
  ClientHeight = 506
  ClientWidth = 698
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object l_frage: TLabel
    Left = 64
    Top = 40
    Width = 34
    Height = 13
    Caption = 'l_frage'
  end
  object l_checkup: TLabel
    Left = 32
    Top = 253
    Width = 47
    Height = 13
    Caption = 'l_checkup'
  end
  object l_antwort: TLabel
    Left = 336
    Top = 304
    Width = 46
    Height = 13
    Caption = 'l_antwort'
  end
  object radiogroup1: TRadioGroup
    Left = 44
    Top = 104
    Width = 185
    Height = 105
    HelpType = htKeyword
    HelpKeyword = #223
    Caption = 'radiogroup1'
    Items.Strings = (
      '')
    TabOrder = 0
  end
  object b_submit: TButton
    Left = 44
    Top = 312
    Width = 75
    Height = 25
    Caption = 'b_submit'
    TabOrder = 1
    OnClick = b_submitClick
  end
  object b_next: TButton
    Left = 44
    Top = 368
    Width = 75
    Height = 25
    Caption = 'b_next'
    TabOrder = 2
    OnClick = b_nextClick
  end
  object b_cheat: TButton
    Left = 184
    Top = 368
    Width = 75
    Height = 25
    Caption = 'b_cheat'
    TabOrder = 3
    OnClick = b_cheatClick
  end
  object l_loesung: TEdit
    Left = 120
    Top = 250
    Width = 121
    Height = 21
    TabOrder = 4
    Text = 'l_loesung'
  end
  object b_text: TButton
    Left = 166
    Top = 424
    Width = 75
    Height = 25
    Caption = 'b_text'
    TabOrder = 5
    OnClick = b_textClick
  end
  object ListBox1: TListBox
    Left = 400
    Top = 91
    Width = 268
    Height = 111
    ItemHeight = 13
    TabOrder = 6
    OnClick = ListBox1Click
  end
  object Button1: TButton
    Left = 328
    Top = 352
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 7
    OnClick = Button1Click
  end
  object OpenDialog1: TOpenDialog
    FileName = 'C:\Schule\voc.txt'
    Left = 360
    Top = 216
  end
end
 
Gefällt mir: Mat
Oben