📄 jvqgrids.pas
字号:
if PtInRect(FActiveList.ClientRect, ListPos) then
begin
StopTracking;
MousePos := PointToSmallPoint(ListPos);
THackedWinControl(FActiveList).MouseDown(mbLeft, Shift, MousePos.X , MousePos.Y);
Exit;
end;
end;
end;
inherited MouseMove(Shift, X, Y);
end;
procedure TJvInplaceEdit.MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
var
WasPressed: Boolean;
begin
WasPressed := FPressed;
StopTracking;
if (Button = mbLeft) and (FEditStyle = ieEllipsis) and WasPressed then
TJvDrawGrid(Grid).EditButtonClick;
inherited MouseUp(Button, Shift, X, Y);
end;
procedure TJvInplaceEdit.Painting(Sender: QObjectH; EventRegion: QRegionH);
const
LeftOffs = 3;
var
R: TRect;
Flags: Integer;
W, G, I: Integer;
DC: QPainterH;
begin
DC := QPainter_create(QWidget_to_QPaintDevice(Handle), Handle);
try
QPainter_setClipRegion(DC, EventRegion);
QPainter_setClipping(DC, not QRegion_isEmpty(EventRegion));
if FEditStyle <> ieSimple then
begin
SetRect(R, Width - FButtonWidth, 0, Width, Height);
Flags := 0;
if FEditStyle in [iePickList] then
begin
if FActiveList = nil then
Flags := DFCS_INACTIVE
else
if FPressed then
Flags := DFCS_FLAT or DFCS_PUSHED;
DrawFrameControl(DC, R, DFC_SCROLL, Flags or DFCS_SCROLLCOMBOBOX);
end
else
begin { esEllipsis }
if FPressed then
Flags := BF_FLAT;
DrawEdge(DC, R, EDGE_RAISED, BF_RECT or BF_MIDDLE or Flags);
W := 2;
G := (FButtonWidth - LeftOffs * 2 - 3 * W) div 2;
if G <= 0 then
G := 1;
if G > 3 then
G := 3;
Flags := R.Left + (FButtonWidth - 3 * W - 2 * G) div 2 + Ord(FPressed);
I := R.Top + (ClientHeight - W) div 2 {+ Ord(FPressed)};
PatBlt(DC, Flags, I, W, W, BLACKNESS);
PatBlt(DC, Flags + G + W, I, W, W, BLACKNESS);
PatBlt(DC, Flags + 2 * G + 2 * W, I, W, W, BLACKNESS);
end;
ExcludeClipRect(DC, R.Left, R.Top, R.Right, R.Bottom);
end;
finally
QPainter_destroy(DC);
end;
inherited {PaintWindow(DC);}
end;
procedure TJvInplaceEdit.SetEditStyle(Value: TInplaceEditStyle);
begin
if Value = FEditStyle then
Exit;
FEditStyle := Value;
case Value of
iePickList:
begin
if FPickList = nil then
begin
FPickList := TJvGridPopupListBox.Create(Self);
FPickList.Visible := False;
FPickList.Parent := Self;
FPickList.OnMouseUp := ListMouseUp;
FPickList.ItemHeight := 11;
end;
FActiveList := FPickList;
end;
else
FActiveList := nil;
end;
Repaint;
end;
procedure TJvInplaceEdit.StopTracking;
begin
if FTracking then
begin
TrackButton(-1, -1);
FTracking := False;
MouseCapture := False;
end;
end;
procedure TJvInplaceEdit.TrackButton(X, Y: Integer);
var
NewState: Boolean;
R: TRect;
begin
SetRect(R, ClientWidth - FButtonWidth, 0, ClientWidth, ClientHeight);
NewState := PtInRect(R, Point(X, Y));
if FPressed <> NewState then
begin
FPressed := NewState;
InvalidateRect(R, False);
end;
end;
procedure TJvInplaceEdit.UpdateContents;
var
SaveChanged: TNotifyEvent;
begin
with TJvDrawGrid(Grid) do
begin
Self.Alignment := GetEditAlignment(Col, Row);
EditStyle := GetEditStyle(Col, Row);
end;
SaveChanged := Self.OnChange;
try
Self.OnChange := nil;
inherited UpdateContents;
finally
Self.OnChange := SaveChanged;
end;
end;
procedure TJvInplaceEdit.DoExit;
begin
CloseUp(False);
end;
//=== { TJvDrawGrid } ========================================================
constructor TJvDrawGrid.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
DefaultRowHeight := 18;
Options := [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine,
goDrawFocusSelected, goColSizing];
FIniLink := TJvIniLink.Create;
FIniLink.OnSave := IniSave;
FIniLink.OnLoad := IniLoad;
FPressedCell.X := -1;
FPressedCell.Y := -1;
FCellDown.X := -1;
FCellDown.Y := -1;
FBeepOnError := True;
end;
destructor TJvDrawGrid.Destroy;
begin
FOnChangeFocus := nil;
FIniLink.Free;
inherited Destroy;
end;
function TJvDrawGrid.GetStorage: TJvFormPlacement;
begin
Result := FIniLink.Storage;
end;
procedure TJvDrawGrid.SetStorage(Value: TJvFormPlacement);
begin
FIniLink.Storage := Value;
end;
procedure TJvDrawGrid.IniSave(Sender: TObject);
begin
if (Name <> '') and Assigned(IniStorage) then
SaveToAppStorage(IniStorage.AppStorage, IniStorage.AppStorage.ConcatPaths([
IniStorage.AppStoragePath, GetDefaultSection(Self)]));
end;
procedure TJvDrawGrid.IniLoad(Sender: TObject);
begin
if (Name <> '') and Assigned(IniStorage) then
LoadFromAppStorage(IniStorage.AppStorage, IniStorage.AppStorage.ConcatPaths([
IniStorage.AppStoragePath, GetDefaultSection(Self)]));
end;
function TJvDrawGrid.CanEditAcceptKey(Key: Char): Boolean;
begin
if Assigned(FOnAcceptEditKey) then
Result := FOnAcceptEditKey(Self, Key)
else
Result := inherited CanEditAcceptKey(Key);
end;
function TJvDrawGrid.CanEditShow: Boolean;
begin
Result := inherited CanEditShow;
if Result and Assigned(FOnShowEditor) then
begin
FOnShowEditor(Self, Col, Row, Result);
if not Result then
EditorMode := False;
end;
end;
procedure TJvDrawGrid.DrawPicture(ARect: TRect; Graphic: TGraphic);
begin
DrawCellBitmap(Self, 0, 0, Graphic, ARect);
end;
procedure TJvDrawGrid.DrawMasked(ARect: TRect; Graphic: TBitmap);
var
X, Y: Integer;
begin
X := (ARect.Right + ARect.Left - Graphic.Width) div 2;
Y := (ARect.Bottom + ARect.Top - Graphic.Height) div 2;
DrawBitmapTransparent(Canvas, X, Y, Graphic, Graphic.TransparentColor and not PaletteMask);
end;
procedure TJvDrawGrid.DrawStr(ARect: TRect; const S: string;
Align: TAlignment);
begin
DrawCellTextEx(Self, 0, 0, S, ARect, Align, vaCenterJustify, False, IsRightToLeft);
end;
procedure TJvDrawGrid.DrawMultiline(ARect: TRect; const S: string;
Align: TAlignment);
begin
DrawCellTextEx(Self, 0, 0, S, ARect, Align, vaTopJustify, True, IsRightToLeft);
end;
procedure TJvDrawGrid.InvalidateCell(ACol, ARow: Longint);
begin
inherited InvalidateCell(ACol, ARow);
end;
procedure TJvDrawGrid.InvalidateCol(ACol: Longint);
begin
inherited InvalidateCol(ACol);
end;
procedure TJvDrawGrid.InvalidateRow(ARow: Longint);
var
I: Longint;
begin
for I := 0 to ColCount - 1 do
inherited InvalidateCell(I, ARow);
end;
procedure TJvDrawGrid.LoadFromAppStorage(const AppStorage: TJvCustomAppStorage; const Path: string);
begin
if (Name <> '') then
InternalRestoreGridLayout(Self, IniStorage.AppStorage, Path);
end;
procedure TJvDrawGrid.SaveToAppStorage(const AppStorage: TJvCustomAppStorage; const Path: string);
begin
if (Name <> '') then
InternalSaveGridLayout(Self, IniStorage.AppStorage, Path);
end;
procedure TJvDrawGrid.Load;
begin
IniLoad(nil);
end;
procedure TJvDrawGrid.Save;
begin
IniSave(nil);
end;
procedure TJvDrawGrid.KeyDown(var Key: Word; Shift: TShiftState);
begin
if not CanGridAcceptKey(Key, Shift) then
Exit;
if not (ssCtrl in Shift) and (Key = VK_ESCAPE) and EditorMode and
(InplaceEditor <> nil) and InplaceEditor.Visible and
not (goAlwaysShowEditor in Options) then
begin
FNoUpdateData := True;
try
HideEditor;
if Assigned(FOnCancelEdit) then
FOnCancelEdit(Self);
finally
FNoUpdateData := False;
end;
end
else
inherited KeyDown(Key, Shift);
end;
procedure TJvDrawGrid.EditChanged(Sender: TObject);
begin
if Assigned(FOnEditChange) then
FOnEditChange(Self);
end;
function TJvDrawGrid.GetEditLimit: Integer;
begin
Result := inherited GetEditLimit;
if Assigned(FOnGetEditLimit) then
FOnGetEditLimit(Self, Result);
end;
procedure TJvDrawGrid.SetEditText(ACol, ARow: Longint; const Value: WideString);
begin
if not FNoUpdateData then
inherited SetEditText(ACol, ARow, Value);
end;
procedure TJvDrawGrid.SetFixedButtons(Value: Boolean);
begin
if FFixedCellsButtons <> Value then
begin
FFixedCellsButtons := Value;
Invalidate;
end;
end;
procedure TJvDrawGrid.DoFixedCellClick(ACol, ARow: Longint);
begin
if Assigned(FOnFixedCellClick) then
FOnFixedCellClick(Self, ACol, ARow);
end;
procedure TJvDrawGrid.CheckFixedCellButton(ACol, ARow: Longint; var Enabled: Boolean);
begin
if (ACol >= 0) and (ARow >= 0) and ((ACol < FixedCols) or (ARow < FixedRows)) then
begin
if Assigned(FOnCheckButton) then
FOnCheckButton(Self, ACol, ARow, Enabled);
end
else
Enabled := False;
end;
procedure TJvDrawGrid.TopLeftChanged;
begin
if (goRowSelect in Options) and DefaultDrawing then
InvalidateRow(Self.Row);
inherited TopLeftChanged;
if FTracking then
StopTracking;
end;
procedure TJvDrawGrid.ColWidthsChanged;
begin
inherited ColWidthsChanged;
if FTracking then
StopTracking;
if Assigned(FOnColumnSized) then
FOnColumnSized(Self);
end;
procedure TJvDrawGrid.RowHeightsChanged;
begin
inherited RowHeightsChanged;
if FTracking then
StopTracking;
if Assigned(FOnRowSized) then
FOnRowSized(Self);
end;
procedure TJvDrawGrid.StopTracking;
begin
if FTracking then
begin
TrackButton(-1, -1);
FTracking := False;
MouseCapture := False;
end;
end;
procedure TJvDrawGrid.TrackButton(X, Y: Integer);
var
Cell: TGridCoord;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -