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

📄 tabsformu.pas

📁 jvcl driver development envionment
💻 PAS
📖 第 1 页 / 共 2 页
字号:
var
  Index: Integer;
begin
  Index := lsbTabStopPositions.ItemIndex;
  if (Index >= 0) and (Index < FTabs.Count) then
  begin
    FTabs.Delete(Index);
    lsbTabStopPositions.Items.Delete(Index);
  end;
  GotoTab(Min(Index, FTabs.Count - 1));
end;

procedure TTabsForm.cmbMeasurementUnitsChange(Sender: TObject);
begin
  UpdateMeasurementUnits;
end;

constructor TTabsForm.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FTabs := TObjectList.Create;
  Init;
end;

destructor TTabsForm.Destroy;
begin
  FTabs.Free;
  inherited Destroy;
end;

procedure TTabsForm.edtTabStopPositionKeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_DOWN) and not (ssAlt in Shift) then
  begin
    GotoTab(Min(lsbTabStopPositions.ItemIndex + 1, FTabs.Count - 1));
    Key := 0;
  end
  else
  if (Key = VK_UP) and not (ssAlt in Shift) then
  begin
    GotoTab(Max(lsbTabStopPositions.ItemIndex - 1, 0));
    Key := 0;
  end
  else
  if Key = VK_RETURN then
    SetTabStop;
end;

procedure TTabsForm.FillMeasurementUnits(Strings: TStrings);
var
  MeasurementUnit: TMeasurementUnit;
begin
  Strings.BeginUpdate;
  try
    Strings.Clear;
    for MeasurementUnit := Low(TMeasurementUnit) to High(TMeasurementUnit) do
      Strings.AddObject(CMeasurementUnitLongStr[MeasurementUnit], TObject(MeasurementUnit));
  finally
    Strings.EndUpdate;
  end;
end;

function TTabsForm.FindTab(const APosition: Integer;
  var Index: Integer): Boolean;
var
  L, H, I, C: Integer;
begin
  Result := False;
  L := 0;
  H := FTabs.Count - 1;
  while L <= H do
  begin
    I := (L + H) shr 1;
    C := TTabObj(FTabs[I]).Position - APosition;
    if C < 0 then
      L := I + 1
    else
    begin
      H := I - 1;
      if C = 0 then
      begin
        Result := True;
        Index := I;
        Exit;
      end;
    end;
  end;
  Index := L;
end;

function TTabsForm.GetTabAlignment: TJvTabAlignment;
var
  Alignment: TJvTabAlignment;
begin
  for Alignment := Low(TJvTabAlignment) to High(TJvTabAlignment) do
    if Assigned(FAlignmentObjs[Alignment]) and
      FAlignmentObjs[Alignment].Checked then
    begin
      Result := Alignment;
      Exit;
    end;
  Result := Low(TJvTabAlignment);
end;

function TTabsForm.GetTabLeader: TJvTabLeader;
var
  Leader: TJvTabLeader;
begin
  for Leader := Low(TJvTabLeader) to High(TJvTabLeader) do
    if Assigned(FLeaderObjs[Leader]) and
      FLeaderObjs[Leader].Checked then
    begin
      Result := Leader;
      Exit;
    end;
  Result := Low(TJvTabLeader);
end;

procedure TTabsForm.GetTabs(Paragraph: TJvParaAttributes);
var
  I: Integer;
begin
  Paragraph.TabCount := FTabs.Count;

  for I := 0 to FTabs.Count - 1 do
    with TTabObj(FTabs[i]) do
    begin
      Paragraph.Tab[i] := Position;
      Paragraph.TabAlignment[i] := Alignment;
      Paragraph.TabLeader[i] := Leader;
    end;
end;

procedure TTabsForm.GotoTab(const Index: Integer);
begin
  lsbTabStopPositions.ItemIndex := Index;
  SelectTab(Index);
end;

procedure TTabsForm.Init;
var
  Leader: TJvTabLeader;
  Alignment: TJvTabAlignment;
begin
  FillChar(FLeaderObjs, SizeOf(FLeaderObjs), #0);
  FillChar(FAlignmentObjs, SizeOf(FAlignmentObjs), #0);

  FLeaderObjs[tlNone] := rbtLeader1;
  FLeaderObjs[tlDotted] := rbtLeader2;
  FLeaderObjs[tlDashed] := rbtLeader3;
  FLeaderObjs[tlUnderlined] := rbtLeader4;
  FLeaderObjs[tlDouble] := rbtLeader5;

  FAlignmentObjs[taOrdinary] := rbtAlignment1;
  FAlignmentObjs[taCenter] := rbtAlignment2;
  FAlignmentObjs[taRight] := rbtAlignment3;
  FAlignmentObjs[taDecimal] := rbtAlignment4;
  FAlignmentObjs[taVertical] := rbtAlignment5;

  if RichEditVersion < 3 then
  begin
    for Leader := Low(TJvTabLeader) to High(TJvTabLeader) do
      if (Leader <> tlNone) and Assigned(FLeaderObjs[Leader]) then
        FLeaderObjs[Leader].Enabled := False;
    for Alignment := Low(TJvTabAlignment) to High(TJvTabAlignment) do
      if (Alignment <> taOrdinary) and Assigned(FAlignmentObjs[Alignment]) then
        FAlignmentObjs[Alignment].Enabled := False;
  end;

  FillMeasurementUnits(cmbMeasurementUnits.Items);
  FMeasurementUnit := CInitialMeasurementUnit;
  with cmbMeasurementUnits do
    ItemIndex := Items.IndexOfObject(TObject(FMeasurementUnit));
end;

procedure TTabsForm.IsTabStopFilled(Sender: TObject);
begin
  if Sender is TAction then
    TAction(Sender).Enabled := edtTabStopPosition.Text > '';
end;

procedure TTabsForm.lsbTabStopPositionsClick(Sender: TObject);
begin
  SelectTab(lsbTabStopPositions.ItemIndex);
end;

procedure TTabsForm.lsbTabStopPositionsEnter(Sender: TObject);
begin
  edtTabStopPosition.SetFocus;
end;

procedure TTabsForm.SelectTab(const Index: Integer);
begin
  if (Index < 0) or (Index >= FTabs.Count) then
  begin
    edtTabStopPosition.Text := '';
    if ActiveControl = lsbTabStopPositions then
      edtTabStopPosition.SetFocus;
    Exit;
  end;

  with TTabObj(FTabs[Index]) do
  begin
    edtTabStopPosition.Text := PositionToText(Position, FMeasurementUnit);
    TabLeader := Leader;
    TabAlignment := Alignment;
  end;

  if Self.Visible then
    with edtTabStopPosition do
    begin
      if Self.ActiveControl = lsbTabStopPositions then
        SetFocus;
      SelectAll;
    end;
end;

procedure TTabsForm.SetTabAlignment(const Value: TJvTabAlignment);
begin
  if Assigned(FAlignmentObjs[Value]) then
    FAlignmentObjs[Value].Checked := True;
end;

procedure TTabsForm.SetTabLeader(const Value: TJvTabLeader);
begin
  if Assigned(FLeaderObjs[Value]) then
    FLeaderObjs[Value].Checked := True;
end;

procedure TTabsForm.SetTabs(Paragraph: TJvParaAttributes);
var
  I: Integer;
begin
  for I := 0 to Paragraph.TabCount - 1 do
  begin
    FTabs.Add(TTabObj.Create(Paragraph.Tab[i], Paragraph.TabAlignment[i], Paragraph.TabLeader[i]));
    lsbTabStopPositions.Items.Add('');
  end;
  if lsbTabStopPositions.Items.Count > 0 then
  begin
    lsbTabStopPositions.ItemIndex := 0;
    SelectTab(0);
  end
  else
  begin
    edtTabStopPosition.Text := '';
    rbtLeader1.Checked := True;
    rbtAlignment1.Checked := True;
  end;
end;

procedure TTabsForm.SetTabStop;
var
  Position: Integer;
  Index: Integer;
begin
  Position := TextToPosition(edtTabStopPosition.Text, FMeasurementUnit);
  if FindTab(Position, Index) then
    with TTabObj(FTabs[Index]) do
    begin
      Alignment := TabAlignment;
      Leader := TabLeader;
    end
  else
  begin
    FTabs.Insert(Index, TTabObj.Create(Position, TabAlignment, TabLeader));
    lsbTabStopPositions.Items.Add('');
  end;
  GotoTab(Index);
end;

procedure TTabsForm.UpdateLeader;
var
  Leader: TJvTabLeader;
begin
  if not Assigned(FAlignmentObjs[taVertical]) then
    Exit;

  for Leader := Low(TJvTabLeader) to High(TJvTabLeader) do
    if Assigned(FLeaderObjs[Leader]) then
      FLeaderObjs[Leader].Enabled :=
        (RichEditVersion >= 3) and not FAlignmentObjs[taVertical].Checked;
end;

procedure TTabsForm.UpdateMeasurementUnits;
var
  Index: Integer;
begin
  Index := cmbMeasurementUnits.ItemIndex;
  if Index < 0 then
    Exit;
  Index := Integer(cmbMeasurementUnits.Items.Objects[Index]);
  if (Index < 0) or (Index > Integer(High(TMeasurementUnit))) then
    Exit;
  FMeasurementUnit := TMeasurementUnit(Index);
  lsbTabStopPositions.Refresh;
  GotoTab(lsbTabStopPositions.ItemIndex);
end;

procedure TTabsForm.lsbTabStopPositionsDrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var S:String;
begin
  if (Index >= 0) and (Index < FTabs.Count) then
  begin
    S := PositionToText(TTabObj(FTabs[Index]).Position, FMeasurementUnit);
    lsbTabStopPositions.Canvas.FillRect(Rect);
    lsbTabStopPositions.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, S);
  end;


end;

end.

⌨️ 快捷键说明

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