📄 editortable.pas
字号:
if(IndexListBox.ItemIndex>-1)then
begin
theName:=IndexListBox.Items[IndexListBox.ItemIndex];
if(CompareText(theName, 'PRIMARY')<>0)then
begin
if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Please enter the Index Name:', 3), DMMain.GetTranslatedMessage('Name of Index:', 4),
theName))then
begin
TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).IndexName:=theName;
RefreshCurrentIndex;
end;
end;
end;
end;
procedure TEditorTableForm.IndexTypeCBoxCloseUp(Sender: TObject);
begin
if(IndexTypeCBox.ItemIndex>0)then
TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).IndexKind:=
IndexTypeCBox.ItemIndex;
if(IndexTypeCBox.ItemIndex=0)then
IndexTypeCBox.ItemIndex:=
TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).IndexKind;
end;
procedure TEditorTableForm.IndexColListBoxMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if(Button=mbLeft)then
begin
DragStartRow:=IndexColListBox.ItemAtPos(Point(X, Y), True);
if(DragStartRow>-1)then
IndexColListBox.BeginDrag(False, 5);
end
else if(Button=mbRight)then
begin
IndexColumnsPopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
end;
end;
procedure TEditorTableForm.DelIndexBtnClick(Sender: TObject);
var //theIndex: TEERIndex;
i: integer;
doIt: Boolean;
begin
if(IndexListBox.ItemIndex>-1)then
begin
if(MessageDlg(DMMain.GetTranslatedMessage('Do you really want to delete the selected index?', 5),
mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
begin
if(CompareText(IndexListBox.Items[IndexListBox.ItemIndex], 'PRIMARY')<>0)then
begin
//ask again if the index is a FKRefDefIndex
if(TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).FKRefDef_Obj_id>-1)then
begin
doIt:=False;
if(MessageDlg(DMMain.GetTranslatedMessage('The selected Index was created automatically '+
'and will be recreated after this editor is closed if the '+
'[Automatically create Index on FK Fields] option is enabled. '+#13#10#13#10+
'To disable automatical Index creation please check the model''s '+
'edit options.'+#13#10#13#10+
'Are you shure you want to delete the selected index?', 6),
mtConfirmation, [mbYes, mbNo], 0)=mrYes)then
begin
//Check all relations and set FKRefDefIndex_Obj_id=-1
for i:=0 to EERModel.ComponentCount-1 do
if(EERModel.Components[i].ClassNameIs('TEERRel'))then
if(TEERRel(EERModel.Components[i]).Obj_id=
TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]).FKRefDef_Obj_id)then
begin
TEERRel(EERModel.Components[i]).FKRefDefIndex_Obj_id:=-1;
doIt:=True;
break;
end;
end;
end
else
doIt:=True;
if(doIt)then
begin
EERTable.Indices.Delete(IndexListBox.ItemIndex);
if(EERTable.Indices.Count>0)then
ShowIndex(TEERIndex(EERTable.Indices[EERTable.Indices.Count-1]).Obj_id)
else
ShowIndex(-1);
end;
end
else
begin
for i:=0 to EERTable.Columns.Count-1 do
TEERColumn(EERTable.Columns[i]).PrimaryKey:=False;
CheckPrimaryIndex;
ColumnGrid.Invalidate;
end;
end;
end;
end;
procedure TEditorTableForm.ColumnGridDblClick(Sender: TObject);
begin
if(ColumnGrid.Row=0)then
Exit;
//Use StringEditor
if((ColumnGrid.Col=1)and(LastClickedCol=1))or(ColumnGrid.Col=7)or(ColumnGrid.Col=8)then
EditCellStr;
if(ColumnGrid.Col=3)then
EditDatatype;
end;
procedure TEditorTableForm.PasteSQLInsertMIClick(Sender: TObject);
var s, s2: string;
i: integer;
begin
//store Clipboard
s2:=Clipboard.AsText;
s:=EERTable.GetSQLInsertCode;
for i:=0 to EERTable.Columns.Count-1 do
begin
if(i<EERTable.Columns.Count-1)then
s:=s+', ';
end;
s:=s+');'+#13#10#13#10;
StdInsertMemo.SelText:=s;
StdInsertMemo.SelStart:=StdInsertMemo.SelStart+StdInsertMemo.SelLength;
StdInsertMemo.SelLength:=0;
Clipboard.AsText:=s2;
end;
procedure TEditorTableForm.FormShow(Sender: TObject);
begin
DMMain.RestoreWinPos(self, True);
end;
procedure TEditorTableForm.MouseEditTmrTimer(Sender: TObject);
begin
{//Simulate delayed double click
if(DoCellEdit)then
EditCellStr;
MouseEditTmr.Enabled:=False;}
end;
procedure TEditorTableForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if(Key=Key_F1)then
DMMain.ShowHelp('editors', 'table');
if(Key=Key_Escape)then
begin
if(ActiveControl=EditorTableFieldEdit)or
(ActiveControl=EditorTableFieldDatatypeInplaceEditor.DatatypeCBox)then
SetFocus
else
AbortBtnClick(self);
end;
end;
procedure TEditorTableForm.FormDeactivate(Sender: TObject);
begin
{if(DoCellEdit)then
begin
if(EditorTableFieldEdit.Visible)then
TEditorTableFieldEdit(EditorTableFieldEdit).ApplyChanges(-1);
if(EditorTableFieldDatatypeInplaceEditor.Visible)then
EditorTableFieldDatatypeInplaceEditor.ApplyChanges(-1);
end;}
if(Not(DMMain.IsFormStayingOnTop(self)))then
sendCLXEvent(Application.MainForm.Handle, QCustomEvent_create(QEventType_RestoreStayOnTopForms, self));
end;
procedure TEditorTableForm.EditIndexColumnLengthMIClick(Sender: TObject);
var theIndex: TEERIndex;
s: string;
begin
if(IndexColListBox.ItemIndex>-1)then
begin
theIndex:=TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]);
//Look for ID in the Params
s:=theIndex.ColumnParams.Values[theIndex.Columns[IndexColListBox.ItemIndex]];
if(DMMain.ShowStringEditor(DMMain.GetTranslatedMessage('Please enter the Length Parameter:', 7), DMMain.GetTranslatedMessage('Length:', 8), s))then
begin
if(s<>'')then
theIndex.ColumnParams.Values[theIndex.Columns[IndexColListBox.ItemIndex]]:=s
else
if(theIndex.ColumnParams.IndexOfName(theIndex.Columns[IndexColListBox.ItemIndex])>=0)then
theIndex.ColumnParams.Delete(theIndex.ColumnParams.IndexOfName(theIndex.Columns[IndexColListBox.ItemIndex]));
end;
ShowIndex(theIndex.Obj_id);
end;
end;
procedure TEditorTableForm.SubmitBtnClick(Sender: TObject);
begin
Close;
end;
procedure TEditorTableForm.AbortBtnClick(Sender: TObject);
begin
DiscardChanges:=True;
Close;
end;
procedure TEditorTableForm.SubmitBtnMouseEnter(Sender: TObject);
begin
TSpeedButton(Sender).Enabled:=True;
end;
procedure TEditorTableForm.SubmitBtnMouseLeave(Sender: TObject);
begin
TSpeedButton(Sender).Enabled:=False;
end;
procedure TEditorTableForm.PageControlTreeViewChange(Sender: TObject;
Node: TTreeNode);
begin
TablePageControl.ActivePageIndex:=PageControlTreeView.Selected.AbsoluteIndex;
PageControlTitleLbl.Caption:=PageControlTreeView.Selected.Text;
end;
procedure TEditorTableForm.FormResize(Sender: TObject);
begin
//TableNameEd
TableNameEd.Width:=Width-(702-164);
//Column Name
ColumnGrid.ColWidths[1]:=(Width-702) div 4+104;
//Column Comments
ColumnGrid.ColWidths[8]:=(Width-702) div 4*3+100;
//PageControlTitle
PageControlTitleShape.Width:=Width-(702-533);
PageControlTitlePnl.Width:=Width-(702-531);
//PageControl
TablePageControl.Width:=Width-(702-541);
//Index page
IndexListBox.Width:=Width-(702-121);
NewIndexBtn.Left:=Width-702+121;
DelIndexBtn.Left:=Width-702+121;
IndexGroupbox.Left:=156+Width-702;
IndexColumnsLbl.Left:=322+Width-702;
IndexDragHintLbl.Left:=366+Width-702;
end;
procedure TEditorTableForm.ClearAllSQLInsertsMIClick(Sender: TObject);
begin
StdInsertMemo.Lines.Clear;
end;
procedure TEditorTableForm.OptionSplitterMoved(Sender: TObject);
begin
PageControlTreeView.Height:=OptionsPnl.Height-(172-155);
TablePageControl.Height:=OptionsPnl.Height-(172-135);
end;
procedure TEditorTableForm.OptionSplitterCanResize(Sender: TObject;
var NewSize: Integer; var Accept: Boolean);
begin
if(NewSize<172)then
Accept:=False;
end;
procedure TEditorTableForm.AddColPrefixMIClick(Sender: TObject);
var s: string;
theCol: TEERColumn;
i: integer;
s1, s2: string;
DoPrefix: Boolean;
begin
DoPrefix:=True;
if(Sender.ClassNameIs('TMenuItem'))then
if(TMenuItem(Sender).Name='AddColPostfixMI')then
DoPrefix:=False;
if(DoPrefix)then
begin
s1:=DMMain.GetTranslatedMessage('Enter a Prefix for the selected columns ...', 98);
s2:=DMMain.GetTranslatedMessage('Prefix:', 99);
end
else
begin
s1:=DMMain.GetTranslatedMessage('Enter a Postfix for the selected columns ...', 100);
s2:=DMMain.GetTranslatedMessage('Postfix:', 101);
end;
if(DMMain.ShowStringEditor(s1, s2, s))then
if(s<>'')then
begin
for i:=ColumnGrid.Selection.Top-1 to ColumnGrid.Selection.Bottom-1 do
begin
if(i>=EERTable.Columns.Count)then
break;
theCol:=TEERColumn(EERTable.GetColumnByIndex(i));
if(theCol=nil)then
continue;
if(theCol.IsForeignKey)then
if(MessageDlg(DMMain.GetTranslatedMessage('%s is a Foreign Key Column and '+
'cannot be edited.', 102, theCol.ColName), mtConfirmation,
[mbYes, mbNo], 0)<>mrYes)then
continue;
if(DoPrefix)then
theCol.ColName:=s+theCol.ColName
else
theCol.ColName:=theCol.ColName+s;
end;
//ColumnGrid.RowCount:=EERTable.Columns.Count+2;
ColumnGrid.Repaint;
ShowIndex(EERTable.CheckPrimaryIndex);
end;
end;
procedure TEditorTableForm.AddColumnstoSelectedIndexMIClick(
Sender: TObject);
var i: integer;
theCol: TEERColumn;
theIndex: TEERIndex;
begin
if(IndexListBox.ItemIndex>-1)and
(IndexListBox.ItemIndex<=EERTable.Indices.Count-1)then
begin
theIndex:=TEERIndex(EERTable.Indices[IndexListBox.ItemIndex]);
for i:=ColumnGrid.Selection.Top-1 to ColumnGrid.Selection.Bottom-1 do
begin
if(i>=EERTable.Columns.Count)then
break;
theCol:=TEERColumn(EERTable.GetColumnByIndex(i));
if(theCol=nil)then
continue;
if(theIndex.Columns.IndexOf(IntToStr(theCol.Obj_id))=-1)then
begin
theIndex.Columns.Add(IntToStr(theCol.Obj_id));
if(CompareText(theIndex.IndexName, 'PRIMARY')=0)then
begin
theCol.PrimaryKey:=True;
ColumnGrid.Invalidate;
end;
ShowIndex(theIndex.Obj_id);
end;
end;
end;
end;
procedure TEditorTableForm.MoveRowupMIClick(Sender: TObject);
begin
if(ColumnGrid.Row>1)then
begin
EERTable.Columns.Move(ColumnGrid.Row-1, ColumnGrid.Row-2);
ColumnGrid.Row:=ColumnGrid.Row-1;
ColumnGrid.Invalidate;
end;
end;
procedure TEditorTableForm.MoveRowdownMIClick(Sender: TObject);
begin
if(ColumnGrid.Row<ColumnGrid.RowCount-2)then
begin
EERTable.Columns.Move(ColumnGrid.Row-1, ColumnGrid.Row);
ColumnGrid.Row:=ColumnGrid.Row+1;
ColumnGrid.Invalidate;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -