-1

メインの編集ボックスの数に基づいてグループボックスの可視性を変更するメイン テンプレートをいくつか用意しようとしています。 EditDay数字だけが入っている編集ボックスです

day:=DayOfTheYear(Now); 
EditDay.Text:=day;

つまり、基本的には年間通算日です。とにかく、私は一年の毎日のためのグループボックス(いくつかのメモを含む)が必要です. これはレコードを含むファイルであり、別のプログラムが毎日のさまざまな情報を読み取るため、最初にそのファイル ライターが必要なので、作成することもできます。それがこれです 記録ファイルを作成しているので、ファイルに書き込む前にまずすべてのボックスがいっぱいになっている必要があります。発送日をメインに指定いたしますTEdit。現在、グループボックスの可視性を設定することに行き詰まっています。以下のコードでは、アクセス違反エラーが発生します。

xTEditnamedで指定された番号EditDayです。yEditDayボックスで1日おきに作成したかったので、すべてを除いてx;

x : Integer;     
y : Integer;

procedure TWriteForm.DayCheckTimer(Sender: TObject);
begin
  x:=StrToInt(EditDay.Text);
  y:=Not x;
  (FindComponent('GroupBox'+IntToStr(x)) as TGroupBox).Visible := True;
  (FindComponent('GroupBox'+IntToStr(y)) as TGroupBox).Visible := False;

x ではなく y:=[1..365] を設定しようとしました。[1..365] - x; 他にもいくつかありましたが、どれも機能しませんでした。

どこが間違っていますか?..どんな助けでも大歓迎です。:))

【初心者です、はい。】

4

2 に答える 2

1

ビュー y:= x ではありません。デバッガーでは、x=1 は y=-2 になり、この名前の Compoentr は見つかりません。

コンポーネントを反復処理する必要があります

For i := 1 to mCount

条件による可視性の設定

(FindComponent('GroupBox'+IntToStr(i)) as TGroupBox).Visible := y = i;
于 2012-11-05T23:48:43.313 に答える
0

ここでは、大量(365)のレコードを処理するための小さなサンプルプロジェクトを示します。

unit RecordEdit_ViewU;

interface

uses
  SysUtils,
  Controls, Forms, Dialogs, StdCtrls, System.Classes;

type
  TPerson = record
    Firstname : string[50]; // shortstring !!
    Lastname : string[50];  // shortstring !!
  end;

  TRecordEdit_View = class( TForm )
    Current_Edit : TEdit;
    Data_Firstname_Edit : TEdit;
    Data_Lastname_Edit : TEdit;
    Data_Prev_Button : TButton;
    Data_Next_Button : TButton;
    Data_Save_Button : TButton;
    procedure FormCreate( Sender : TObject );
    procedure Current_EditChange( Sender : TObject );
    procedure Data_Prev_ButtonClick( Sender : TObject );
    procedure Data_Next_ButtonClick( Sender : TObject );
    procedure Data_Save_ButtonClick( Sender : TObject );
  private
    FData :    array [1 .. 365] of TPerson;
    FCurrent : Integer;
    procedure SetCurrent( const Value : Integer );
    procedure InitData;
    procedure StoreCurrent;
    procedure LoadCurrent;
    procedure SaveData;
  public
    property Current : Integer read FCurrent write SetCurrent;
  end;

var
  RecordEdit_View : TRecordEdit_View;

implementation

{$R *.dfm}

procedure TRecordEdit_View.Current_EditChange( Sender : TObject );
begin
  Current := StrToIntDef( Current_Edit.Text, 0 ); // convert text to integer
end;

procedure TRecordEdit_View.Data_Next_ButtonClick( Sender : TObject );
begin
  Current := Current + 1; // next record
end;

procedure TRecordEdit_View.Data_Prev_ButtonClick( Sender : TObject );
begin
  Current := Current - 1; // prev record
end;

procedure TRecordEdit_View.Data_Save_ButtonClick( Sender : TObject );
begin
  SaveData;
end;

procedure TRecordEdit_View.FormCreate( Sender : TObject );
begin
  InitData;
end;

procedure TRecordEdit_View.InitData;
begin
  FCurrent := Low( FData ); // first record
  LoadCurrent;              // load data from record
end;

procedure TRecordEdit_View.LoadCurrent;
begin
  // Data from record to controls
  Data_Firstname_Edit.Text := FData[Current].Firstname;
  Data_Lastname_Edit.Text  := FData[Current].Lastname;
  // Update the Current-Edit
  Current_Edit.Text := IntToStr( Current );
end;

procedure TRecordEdit_View.SaveData;
begin
  ShowMessage( 'Needs to be implemented!' );
end;

procedure TRecordEdit_View.SetCurrent( const Value : Integer );
begin
  // check, if we have a change and if we can change to the new index
  if ( Value <> Current ) and ( Value >= Low( FData ) ) and ( Value <= High( FData ) )
  then
    begin
      StoreCurrent;      // store data from controls
      FCurrent := Value; // change current index
      LoadCurrent;       // load data from record
    end;
end;

procedure TRecordEdit_View.StoreCurrent;
begin
  // Data from controls to record
  FData[Current].Firstname := Data_Firstname_Edit.Text;
  FData[Current].Lastname  := Data_Lastname_Edit.Text;
end;

end.

そして形

object RecordEdit_View: TRecordEdit_View
  Left = 0
  Top = 0
  Caption = 'RecordEdit_View'
  ClientHeight = 337
  ClientWidth = 635
  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 Current_Edit: TEdit
    Left = 107
    Top = 16
    Width = 75
    Height = 21
    TabOrder = 0
    Text = 'Current_Edit'
    OnChange = Current_EditChange
  end
  object Data_Firstname_Edit: TEdit
    Left = 80
    Top = 56
    Width = 129
    Height = 21
    MaxLength = 50
    TabOrder = 1
    Text = 'Data_Firstname_Edit'
  end
  object Data_Lastname_Edit: TEdit
    Left = 80
    Top = 83
    Width = 129
    Height = 21
    MaxLength = 50
    TabOrder = 2
    Text = 'Data_Lastname_Edit'
  end
  object Data_Prev_Button: TButton
    Left = 80
    Top = 16
    Width = 21
    Height = 21
    Caption = '<'
    TabOrder = 3
    OnClick = Data_Prev_ButtonClick
  end
  object Data_Next_Button: TButton
    Left = 188
    Top = 16
    Width = 21
    Height = 21
    Caption = '>'
    TabOrder = 4
    OnClick = Data_Next_ButtonClick
  end
  object Data_Save_Button: TButton
    Left = 80
    Top = 118
    Width = 129
    Height = 25
    Caption = 'Save Data'
    TabOrder = 5
    OnClick = Data_Save_ButtonClick
  end
end

ここで完全なソースと実行可能ファイルを入手できます

于 2012-11-07T01:13:00.110 に答える