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

📄 jvqcsvbasecontrols.pas

📁 East make Tray Icon in delphi
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      Result := True;
      DoCursorChange;
    end;
  end;
end;

procedure TJvCSVBase.RecordSet(NameValues: TStrings);
var
  I, Index: Integer;
  FieldName: string;
begin
  if NameValues.Count > 0 then
  begin
    for I := 0 to NameValues.Count - 1 do
    begin
      FieldName := NameValues.names[I];
      Index := FDBFields.IndexOf(FieldName);
      if Index <> -1 then
        FDBRecord[Index] := NameValues.Values[FieldName];
    end;
    FDB[FDBCursor] := FDBRecord.CommaText;
    FDB.SaveToFile(CSVFileName);
  end;
end;

procedure TJvCSVBase.DoCursorChanged(NameValues: TStrings; FieldCount: Integer);
begin
  if Assigned(OnCursorChanged) then
    OnCursorChanged(Self, NameValues, FieldCount);
end;

procedure TJvCSVBase.DoCursorChange;
var
  NameValues: TStrings;
begin
  NameValues := TStringList.Create;
  try
    RecordGet(NameValues);
    DisplayFields(NameValues);
    DoCursorChanged(NameValues, NameValues.Count);
  finally
    NameValues.Free;
  end;
end;

procedure TJvCSVBase.DisplayFields(NameValues: TStrings);
var
  AForm: TForm;
  I, Index: Integer;
  ed: TJvCSVEdit;
  cbo: TJvCSVComboBox;
  ck: TJvCSVCheckBox;
  AField: string;
begin
  AForm := TForm(Self.Owner);
  for I := 0 to AForm.ComponentCount - 1 do
    if AForm.Components[I].ClassName = 'TJvCSVEdit' then
    begin
      ed := TJvCSVEdit(AForm.Components[I]);
      if ed.CSVDataBase = Self then
      begin
        AField := ed.CSVField;
        Index := CSVFieldNames.IndexOf(AField);
        if Index <> -1 then
          if FDBCursor > 0 then
            ed.Text := FDBRecord[Index]
          else
            ed.Text := '[' + AField + ']';
      end;
    end
    else
    if AForm.Components[I].ClassName = 'TJvCSVComboBox' then
    begin
      cbo := TJvCSVComboBox(AForm.Components[I]);
      if cbo.CSVDataBase = Self then
      begin
        AField := cbo.CSVField;
        Index := CSVFieldNames.IndexOf(AField);
        if Index <> -1 then
          if FDBCursor > 0 then
            cbo.Text := FDBRecord[Index]
          else
            cbo.Text := '[' + AField + ']';
      end;
    end
    else
    if AForm.Components[I].ClassName = 'TJvCSVCheckBox' then
    begin
      ck := TJvCSVCheckBox(AForm.Components[I]);
      if ck.CSVDataBase = Self then
      begin
        AField := ck.CSVField;
        Index := CSVFieldNames.IndexOf(AField);
        if Index <> -1 then
          if FDBCursor > 0 then
            ck.Checked := FDBRecord[Index] = 'True'
          else
            ck.Checked := False;
      end;
    end;
end;

procedure TJvCSVBase.SetCSVFileName(const Value: string);
begin
  if Value <> FCSVFileName then
  begin
    DataBaseClose;
    FCSVFileName := Value;
    if FileExists(CSVFileName) then
      DataBaseOpen(CSVFileName)
    else
      DataBaseCreate(CSVFileName, nil);
  end;
end;

procedure TJvCSVBase.Display;
begin
  DoCursorChange;
end;

procedure TJvCSVBase.RecordPost;
var
  AForm: TForm;
  I, Index: Integer;
  ed: TJvCSVEdit;
  cbo: TJvCSVComboBox;
  ck: TJvCSVCheckBox;
  AField: string;
begin
  if FDBCursor < 1 then
    Exit;
  AForm := TForm(Self.Owner);
  for I := 0 to AForm.ComponentCount - 1 do
    if AForm.Components[I].ClassName = 'TJvCSVEdit' then
    begin
      ed := TJvCSVEdit(AForm.Components[I]);
      if ed.CSVDataBase = Self then
      begin
        AField := ed.CSVField;
        Index := CSVFieldNames.IndexOf(AField);
        if Index <> -1 then
          FDBRecord[Index] := ed.Text;
      end;
    end
    else
    if AForm.Components[I].ClassName = 'TJvCSVComboBox' then
    begin
      cbo := TJvCSVComboBox(AForm.Components[I]);
      if cbo.CSVDataBase = Self then
      begin
        AField := cbo.CSVField;
        Index := CSVFieldNames.IndexOf(AField);
        if Index <> -1 then
          FDBRecord[Index] := cbo.Text;
      end;
    end
    else
    if AForm.Components[I].ClassName = 'TJvCSVCheckBox' then
    begin
      ck := TJvCSVCheckBox(AForm.Components[I]);
      if ck.CSVDataBase = Self then
      begin
        AField := ck.CSVField;
        Index := CSVFieldNames.IndexOf(AField);
        if Index <> -1 then
          if ck.Checked then
            FDBRecord[Index] := 'True'
          else
            FDBRecord[Index] := 'False';
      end;
    end;

  FDB[FDBCursor] := FDBRecord.CommaText;
  FDB.SaveToFile(CSVFileName);
end;

function TJvCSVBase.GetCSVFieldNames: TStrings;
begin
  Result := FCSVFieldNames;
end;

procedure TJvCSVBase.SetCSVFieldNames(const Value: TStrings);
var
  OldFile: string;
begin
  if (CSVFileName <> '') and (Value.Count > 0) then
  begin
    OldFile := CSVFileName;
    DataBaseClose;
    FCSVFieldNames.Assign(Value);
    DataBaseRestructure(OldFile, Value);
    DataBaseOpen(OldFile);
  end;
end;

//=== { TJvCSVEdit } =========================================================

procedure TJvCSVEdit.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (AComponent = FCSVDataBase) then
  begin
    FCSVDataBase := nil;
    FCSVField := '';
  end;
end;

procedure TJvCSVEdit.SetCSVDataBase(const Value: TJvCSVBase);
begin
  FCSVDataBase := Value;
end;

procedure TJvCSVEdit.SetCSVField(const Value: string);
begin
  if Value <> FCSVField then
  begin
    FCSVField := Value;
    if Assigned(FCSVDataBase) then
      CSVDataBase.Display;
  end;
end;

//=== { TJvCSVNavigator } ====================================================

constructor TJvCSVNavigator.Create(AOwner: TComponent);
begin
  inherited Create(AOwner); 
  Height := 24;
  Width := 217;
  CreateButtons; 
  ControlStyle := ControlStyle - [csSetCaption]; 
end;

procedure TJvCSVNavigator.BtnAddClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.RecordNew;
end;

procedure TJvCSVNavigator.BtnDeleteClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.RecordDelete;
end;

procedure TJvCSVNavigator.BtnFindClick(Sender: TObject);
var
  AText: string;
begin
  if Assigned(FCSVDataBase) then
  begin
    AText := inputbox(RsCVSDatabase, RsFindText, '');
    if AText <> '' then
      CSVDataBase.RecordFind(AText);
  end;
end;

procedure TJvCSVNavigator.BtnFirstClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.RecordFirst;
end;

procedure TJvCSVNavigator.BtnLastClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.RecordLast;
end;

procedure TJvCSVNavigator.BtnNextClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.RecordNext;
end;

procedure TJvCSVNavigator.BtnPostClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.RecordPost;
end;

procedure TJvCSVNavigator.BtnPreviousClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.RecordPrevious;
end;

procedure TJvCSVNavigator.BtnRefreshClick(Sender: TObject);
begin
  if Assigned(FCSVDataBase) then
    CSVDataBase.Display;
end;

procedure TJvCSVNavigator.CreateButtons;

  procedure InitButton(var Btn: TSpeedButton; ALeft: Integer; GlyphName: string;
    ClickEvent: TNotifyEvent; AHint: string);
  begin
    Btn := TSpeedButton.Create(Self);
    Btn.Width := 23;
    Btn.Height := 22;
    Btn.Flat := True;
    Btn.Top := 1;
    Btn.Left := ALeft;
    Btn.Glyph.LoadFromResourceName(HInstance, GlyphName);
    Btn.OnClick := ClickEvent;
    Btn.Hint := AHint;
    Btn.Parent := Self;
  end;

begin
  ShowHint := True;
  InitButton(FBtnFirst, 1, 'JVCSVFIRST', BtnFirstClick, RsFirstHint);
  InitButton(FBtnPrevious, 25, 'JVCSVPREVIOUS', BtnPreviousClick, RsPreviousHint);
  InitButton(FBtnFind, 49, 'JVCSVFIND', BtnFindClick, RsFindHint);
  InitButton(FBtnNext, 73, 'JVCSVNEXT', BtnNextClick, RsNextHint);
  InitButton(FBtnLast, 97, 'JVCSVLAST', BtnLastClick, RsLastHint);
  InitButton(FBtnAdd, 121, 'JVCSVADD', BtnAddClick, RsAddHint);
  InitButton(FBtnDelete, 145, 'JVCSVDELETE', BtnDeleteClick, RsDeleteHint);
  InitButton(FBtnPost, 169, 'JVCSVPOST', BtnPostClick, RsPostHint);
  InitButton(FBtnRefresh, 193, 'JVCSVREFRESH', BtnRefreshClick, RsRefreshHint);
end;



procedure TJvCSVNavigator.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (AComponent = FCSVDataBase) then
    FCSVDataBase := nil;
end;

procedure TJvCSVNavigator.BoundsChanged;
begin
  Height := 24;
  if Width < 221 then
    Width := 221;
  inherited BoundsChanged;
end;

procedure TJvCSVNavigator.SetCSVDataBase(const Value: TJvCSVBase);
begin
  FCSVDataBase := Value;
end;

//=== { TJvCSVComboBox } =====================================================

procedure TJvCSVComboBox.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (AComponent = FCSVDataBase) then
  begin
    FCSVDataBase := nil;
    FCSVField := '';
  end;
end;

procedure TJvCSVComboBox.SetCSVDataBase(const Value: TJvCSVBase);
begin
  FCSVDataBase := Value;
end;

procedure TJvCSVComboBox.SetCSVField(const Value: string);
begin
  if Value <> FCSVField then
  begin
    FCSVField := Value;
    if Assigned(FCSVDataBase) then
      CSVDataBase.Display;
  end;
end;

//=== { TJvCSVCheckBox } =====================================================

procedure TJvCSVCheckBox.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (AComponent = FCSVDataBase) then
  begin
    FCSVDataBase := nil;
    FCSVField := '';
  end;
end;

procedure TJvCSVCheckBox.SetCSVDataBase(const Value: TJvCSVBase);
begin
  FCSVDataBase := Value;
end;

procedure TJvCSVCheckBox.SetCSVField(const Value: string);
begin
  if Value <> FCSVField then
  begin
    FCSVField := Value;
    if Assigned(FCSVDataBase) then
      CSVDataBase.Display;
  end;
end;

{$IFDEF UNITVERSIONING}
const
  UnitVersioning: TUnitVersionInfo = (
    RCSfile: '$RCSfile: JvQCSVBaseControls.pas,v $';
    Revision: '$Revision: 1.23 $';
    Date: '$Date: 2005/02/06 14:06:01 $';
    LogPath: 'JVCL\run'
  );

initialization
  RegisterUnitVersion(HInstance, UnitVersioning);

finalization
  UnregisterUnitVersion(HInstance);
{$ENDIF UNITVERSIONING}

end.

⌨️ 快捷键说明

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