Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Delphi] - Problema TRadioButton

    Salve

    Sto sviluppando applicativi in Delphi con embarcadero RAD studio XE a scopo didattico personale (voglio imparare a programmare in delphi)

    ho fatto un piccolo convertitore banale solo che non mi funziona la scelta radio per il tipo di dato da convertire. cioè in base alla scelta del radiogrup dovrebbero cambiare i valori di conversione e i label delle TEdit dove si inserisce il numero da convertire ma non va

    ecco il codice :

    codice:
    unit Convertitore;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Miglia: TEdit;
        Chilometri: TEdit;
        miglialbl: TLabel;
        chilometrilbl: TLabel;
        arrotonda: TCheckBox;
        gruppomisure: TRadioGroup;
        pollicitocentimetri: TRadioButton;
        pieditometri: TRadioButton;
        iardetometri: TRadioButton;
        migliatochilometri: TRadioButton;
        procedure ChilometriChange(Sender: TObject);
        procedure MigliaChange(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure gruppomisureClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
      Conv: Extended;
    implementation
    
    {$R *.dfm}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        Conv := 2.54 ; // Inizio a dichiarare la variabile dai pollici
        // Inizializzo campi di testo
        Chilometri.Text := '0' ;
        Miglia.Text := '0' ;
    end;
    
    procedure TForm1.gruppomisureClick(Sender: TObject);
    begin
      case gruppomisure.ItemIndex of // Effettuo dei cambiamentri al convertitore in base alla scelta della radio
          0: begin
              Conv := 2.54 ; // Pollici
              miglialbl.Caption := 'Pollici' ;
              chilometrilbl.Caption := 'Centimetri' ;
              end;
          1: begin
              Conv := 0.30 ; // Piedi
              miglialbl.Caption := 'Piedi' ;
              chilometrilbl.Caption := 'Metri' ;
              end;
          2: begin
              Conv := 0.9 ; // Iarde
              miglialbl.Caption := 'Iarde' ;
              chilometrilbl.Caption := 'Metri' ;
              end;
      end;
      miglia.Text := '0' ;
      chilometri.Text := '0' ;
    end;
    
    procedure TForm1.ChilometriChange(Sender: TObject);
    var
      val: extended ;
    begin
        if Chilometri.focused then  // Evitiamo Cambiamenti a Cascata
        begin
        // 0.39 = 1/ 2.54
        val := StrtoFloat(Chilometri.Text) / Conv ;
        if  arrotonda.Checked then
            val := Round(val) ; // Arrotondamento se necessario
        miglia.Text := FloattoStr(val) ;
        end;
    end;
    
    procedure TForm1.MigliaChange(Sender: TObject);
    var
      val: extended ;
    begin
      if Miglia.focused then // Eviatiamo cambiamenti a cascata
      begin
      val := Conv * StrtoFloat(Miglia.Text) ;
      if arrotonda.Checked then
            val := Round(val) ;
      chilometri.Text := FloattoStr(val) ;
      end;
    end;
    end.
    Questo è il codice per disegnare la form

    codice:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 213
      ClientWidth = 276
      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 miglialbl: TLabel
        Left = 8
        Top = 169
        Width = 36
        Height = 13
        Caption = 'Miglia : '
      end
      object chilometrilbl: TLabel
        Left = 152
        Top = 169
        Width = 57
        Height = 13
        Caption = 'Chilometri : '
      end
      object Miglia: TEdit
        Left = 8
        Top = 188
        Width = 121
        Height = 21
        TabOrder = 4
        OnChange = MigliaChange
      end
      object Chilometri: TEdit
        Left = 152
        Top = 188
        Width = 121
        Height = 21
        TabOrder = 5
        OnChange = ChilometriChange
      end
      object arrotonda: TCheckBox
        Left = 8
        Top = 146
        Width = 97
        Height = 17
        Caption = 'Arrotonda'
        TabOrder = 6
      end
      object gruppomisure: TRadioGroup
        Left = 8
        Top = 8
        Width = 265
        Height = 132
        Caption = 'Opzioni di conversione: '
        TabOrder = 7
        OnClick = gruppomisureClick
      end
      object pollicitocentimetri: TRadioButton
        Left = 24
        Top = 32
        Width = 113
        Height = 17
        Caption = 'Pollici/Centimetri'
        TabOrder = 0
      end
      object pieditometri: TRadioButton
        Tag = 1
        Left = 24
        Top = 55
        Width = 113
        Height = 17
        Caption = 'Piedi/Metri'
        TabOrder = 1
      end
      object iardetometri: TRadioButton
        Tag = 2
        Left = 24
        Top = 78
        Width = 113
        Height = 17
        Caption = 'Iarde/Metri'
        TabOrder = 2
      end
      object migliatochilometri: TRadioButton
        Tag = 3
        Left = 24
        Top = 101
        Width = 113
        Height = 17
        Caption = 'Miglia/Chilometri'
        TabOrder = 3
        OnClick = gruppomisureClick
      end
    end
    Programmatore - Consulenza informatica -
    Web Design - Professionista I.T.
    ---------------------------------------
    http://www.malorgio.it

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Nel tuo Form, hai inserito sia un controllo TRadioGroup, sia diversi controlli TRadioButton, poi hai agganciato un metodo all'evento OnClick del RadioGroup, che però non verrà mai richiamato in quanto non hai inserito alcun elemento nel controllo, ma hai creato successivamente dei RadioButton separati.

    Il controllo TRadioButton può essere inserito all'interno di un controllo contenitore, quale è ad esempio un TPanel, comportandosi come una casella di spunta che lavora in "modalità esclusiva": quando è selezionato, nello stesso contenitore altri controlli analoghi vengono deselezionati, poiché appartenenti allo stesso gruppo dal punto di vista logico.

    Quando occorre disporre di molte opzioni, diventa tedioso creare tanti contenitori (es. Panel, GroupBox, ecc.) e altrettanti RadioButton all'interno.

    Il controllo TRadioGroup viene in aiuto in questo frangente: permette di raffigurare sul Form una casella di raggruppamento creando automaticamente al proprio interno tutti i RadioButton che servono per esprimere le opzioni indicate nella proprietà Items del controllo.

    Da qui il tuo problema: o utilizzi il controllo TRadioGroup, con l'evento OnClick agganciato, e definisci nella proprietà Items le diverse opzioni selezionabili, oppure crei una GroupBox e metti al suo interno tanti RadioButton quante sono le opzioni, gestendone l'evento OnClick sui singoli pulsanti.

    Tu hai fatto una mescolanza tra le due cose, creando un RadioGroup "vuoto" (e che non è un contenitore, tant'è che i RadioButton sono spostabili all'esterno dato che il loro "parent" è il Form) e aggiungendo dei RadioButton separati il cui evento di clic non è gestito.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.