⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex2darru.pas

📁 条码控件: 一维条码控件 二维条码控件 PDF417Barcode MaxiCodeBarcode
💻 PAS
字号:
(* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is TurboPower SysTools
 *
 * The Initial Developer of the Original Code is
 * TurboPower Software
 *
 * Portions created by the Initial Developer are Copyright (C) 1996-2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * ***** END LICENSE BLOCK ***** *)

unit Ex2DArrU;

interface

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

  StConst, StUtils, StBase, StLArr;

type
  TSTDlg = class(TForm)
    ArrayLB: TListBox;
    CreateBtn: TButton;
    Label5: TLabel;
    LMValue: TEdit;
    Label6: TLabel;
    LMRow: TEdit;
    LMCol: TEdit;
    ClearBtn: TButton;
    FillBtn: TButton;
    PutBtn: TButton;
    PutRowBtn: TButton;
    GetBtn: TButton;
    GetRowBtn: TButton;
    SortBtn: TButton;
    LoadBtn: TButton;
    SaveBtn: TButton;
    OD1: TOpenDialog;
    SD1: TSaveDialog;

    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);

    procedure CreateBtnClick(Sender: TObject);
    procedure ClearBtnClick(Sender: TObject);
    procedure FillBtnClick(Sender: TObject);
    procedure PutBtnClick(Sender: TObject);
    procedure GetBtnClick(Sender: TObject);
    procedure PutRowBtnClick(Sender: TObject);
    procedure GetRowBtnClick(Sender: TObject);
    procedure SortBtnClick(Sender: TObject);
    procedure LoadBtnClick(Sender: TObject);
    procedure SaveBtnClick(Sender: TObject);
    procedure ArrayLBDblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure SetBusy(B : Boolean);
    procedure FillListBox;
    procedure UpdateButtons(AOK : Boolean);
  end;

var
  STDlg: TSTDlg;

implementation

{$R *.DFM}

type
  S10 = string[10];

const
  MaxRows = 1000;
  MaxCols = 10;

var
  MyLMatrix : TStLMatrix;
  LIArray : array[1..MaxCols] of LongInt;

function MyArraySort(const E1, E2) : Integer; far;
begin
  Result := LongInt(E1) - LongInt(E2);
end;

procedure TSTDlg.UpdateButtons(AOK : Boolean);
begin
  ClearBtn.Enabled  := AOK;
  FillBtn.Enabled   := AOK;
  PutBtn.Enabled    := AOK;
  PutRowBtn.Enabled := AOK;
  GetBtn.Enabled    := AOK;
  GetRowBtn.Enabled := AOK;
  SortBtn.Enabled   := AOK;
  SaveBtn.Enabled   := AOK;
end;

procedure TSTDlg.SetBusy(B : Boolean);
begin
  if B then
    Screen.Cursor := crHourGlass
  else
    Screen.Cursor := crDefault;
end;

procedure TSTDlg.FormCreate(Sender: TObject);
begin
  RegisterClass(TStLMatrix);
  UpdateButtons(False);
end;

procedure TSTDlg.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  MyLMatrix.Free;
end;

procedure TSTDlg.FillListBox;
var
  row,
  col,
  Value : LongInt;
begin
  SetBusy(True);
  ArrayLB.Clear;
  ArrayLB.Perform(WM_SETREDRAW,0,0);

  for row := 0 to MyLMatrix.Rows-1 do
  begin
    for col := 0 to MyLMatrix.Cols-1 do
    begin
      MyLMatrix.Get(row,col,Value);
      ArrayLB.Items.Add(IntToStr(row) + ',' +
                        IntToStr(col) + ' = ' + IntToStr(Value));
    end;
  end;
  ArrayLB.Perform(WM_SETREDRAW,1,0);
  ArrayLB.Update;
  SetBusy(False);
end;


procedure TSTDlg.CreateBtnClick(Sender: TObject);
var
  row,
  col,
  Value  : LongInt;
begin
  ArrayLB.Clear;

  if Assigned(MyLMatrix) then
    MyLMatrix.Free;

  UpdateButtons(False);
  MyLMatrix := TStLMatrix.Create(MaxRows,MaxCols,sizeof(LongInt));
  MyLMatrix.ElementsStorable := True;

  SetBusy(True);
  for row := 0 to MaxRows-1 do
  begin
    for col := 0 to MaxCols-1 do
    begin
      Value := Trunc(Random(10000));
      MyLMatrix.Put(row,col,Value);
    end;
  end;
  SetBusy(False);

  FillListBox;
  UpdateButtons(True);

  LMRow.Text := '0';
  LMCol.Text := '0';
  MyLMatrix.Get(0,0,Value);
  LMValue.Text := IntToStr(Value);
end;

procedure TSTDlg.ClearBtnClick(Sender: TObject);
var
  Value : LongInt;
begin
  MyLMatrix.Clear;
  ArrayLB.Clear;

  LMRow.Text := '0';
  LMCol.Text := '0';
  MyLMatrix.Get(0,0,Value);
  LMValue.Text := IntToStr(Value);
end;

procedure TSTDlg.FillBtnClick(Sender: TObject);
var
  row,
  col,
  Value : LongInt;
begin
  if (LMValue.Text = '') then
  begin
    ShowMessage('No value entered');
    Exit;
  end;

  Value := StrToInt(LMValue.Text);
  MyLMatrix.Fill(Value);

  FillListBox;

  row := 0;
  col := 0;
  LMRow.Text := IntToStr(row);
  LMCol.Text := IntToStr(col);

  MyLMatrix.Get(row, col, Value);
  LMValue.Text := IntToStr(Value);

  SetBusy(False);
end;

procedure TSTDlg.PutBtnClick(Sender: TObject);
var
  LBE,
  row,
  col,
  Value : LongInt;
begin
  if (LMValue.Text = '') then
  begin
    ShowMessage('No value entered');
    Exit;
  end;

  if (LMRow.Text = '') then
    LMRow.Text := '0';
  if (LMCol.Text = '') then
    LMCol.Text := '0';

  Value := StrToInt(LMValue.Text);
  row := StrToInt(LMRow.Text);
  col := StrToInt(LMCol.Text);
  MyLMatrix.Put(row,col,Value);

  LBE := (row * MaxRows) + col;
  ArrayLB.Items[LBE] := IntToStr(row) + ',' +
                        IntToStr(col) + ' = ' + IntToStr(Value);

  row := StrToInt(LMRow.Text);
  col := StrToInt(LMCol.Text);
  MyLMatrix.Get(row, col, Value);
  LMValue.Text := IntToStr(Value);
end;

procedure TSTDlg.GetBtnClick(Sender: TObject);
var
  LBE,
  row,
  col,
  Value : LongInt;
begin
  if (LMValue.Text = '') then begin
    ShowMessage('No value entered');
    Exit;
  end;

  if (LMRow.Text = '') then
    LMRow.Text := '0';
  if (LMCol.Text = '') then
    LMCol.Text := '0';

  Value := StrToInt(LMValue.Text);
  row := StrToInt(LMRow.Text);
  col := StrToInt(LMCol.Text);
  MyLMatrix.Get(row,col,Value);

  LMRow.Text := IntToStr(row);
  LMCol.Text := IntToStr(col);
  LMValue.Text := IntToStr(Value);

  LBE := (row * MaxCols) + col;
  ArrayLB.ItemIndex := LBE;
end;

procedure TSTDlg.PutRowBtnClick(Sender: TObject);
var
  row,
  col,
  Value : LongInt;

begin
  if (LMValue.Text = '') then
  begin
    ShowMessage('No value entered');
    Exit;
  end;

  if (LMRow.Text = '') then
    LMRow.Text := '0';

  Value := StrToInt(LMValue.Text);
  row := StrToInt(LMRow.Text);

  FillStruct(LIArray,MaxCols,Value,SizeOf(Value));

  MyLMatrix.PutRow(row,LIArray);
  FillListBox;

  row := StrToInt(LMRow.Text);
  col := 0;
  MyLMatrix.Get(row, col, Value);

  LMValue.Text := IntToStr(Value);
  LMCol.Text := '0';
end;

procedure TSTDlg.GetRowBtnClick(Sender: TObject);
var
  step,
  LIV   : LongInt;

begin
  if (LMRow.Text = '') then
    LMRow.Text := '0';

  LIV := 0;
  FillStruct(LIArray,MaxCols,LIV,SizeOf(LIV));
  MyLMatrix.GetRow(0,LIArray);

  ArrayLB.Clear;
  ArrayLB.Perform(WM_SETREDRAW,0,0);

  for step := 1 to MaxCols do
    ArrayLB.Items.Add('Col' + IntToStr(step-1) + ': ' + IntToStr(LIArray[step]));

  ArrayLB.Perform(WM_SETREDRAW,1,0);
  ArrayLB.Update;
end;

procedure TSTDlg.SortBtnClick(Sender: TObject);
begin
  MyLMatrix.SortRows(0,MyArraySort);
  FillListBox;
end;

procedure TSTDlg.LoadBtnClick(Sender: TObject);
begin
  if (OD1.Execute) then
  begin
    if NOT (Assigned(MyLMatrix)) then
    begin
      UpdateButtons(False);
      MyLMatrix := TStLMatrix.Create(MaxRows,MaxCols,sizeof(LongInt));
      MyLMatrix.ElementsStorable := True;
    end;
    MyLMatrix.LoadFromFile(OD1.FileName);
    FillListBox;
    UpdateButtons(True);
  end;
end;

procedure TSTDlg.SaveBtnClick(Sender: TObject);
begin
  if (SD1.Execute) then
    MyLMatrix.StoreToFile(SD1.FileName);
end;

procedure TSTDlg.ArrayLBDblClick(Sender: TObject);
var
  row,
  col,
  I,
  Value  : LongInt;

begin
  I := ArrayLB.ItemIndex;
  row := I div MaxCols;
  col := I mod MaxCols;

  MyLMatrix.Get(row, col, Value);
  LMRow.Text := IntToStr(row);
  LMCol.Text := IntToStr(col);
  LMValue.Text := IntToStr(Value);
end;



end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -