📄 jvqcsvbasecontrols.pas
字号:
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 + -