Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Нарисовать треугольник в Title DBGrid / 17 сообщений из 17, страница 1 из 1
05.03.2021, 09:25
    #40050947
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
Доброго времени суток, уважаемые! Столкнулся с трудностью при сортировке по нажатию на заголовок столбца. А именно: событие TitleClick обрабатываю, все красиво, НО нужно еще визуальное отображение в виде треугольника текущей сортировки (по возрастанию/убыванию) и в этом и возникли трудности. Шрифты менял, символы разные перепробывал, ну не видит среда Delphi 7 эти символы. Родилась идея: не получается напечатать - нужно нарисовать, но вот как, понятия не имею. Пытался через DBGrid1.Canvas.Draw но далеко пока от этого. Видел идеи на просторах интернета с переопределением и скачиванием другого DBG но хотелось бы обойтись без этого по возможности. Заранее спасибо всем откликнувшимся!
...
Рейтинг: 0 / 0
05.03.2021, 09:56
    #40050956
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
А где вопрос в этом тексте ?
...
Рейтинг: 0 / 0
05.03.2021, 10:45
    #40050991
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
procedure DrawUp3DTriangle(ACanvas: TCanvas; const ARect: TRect;
  AHiglighColor: TColor = clBtnHighlight; AShadowColor: TColor = clBtnShadow);
begin
  ACanvas.MoveTo(ARect.Left, ARect.Bottom);
  ACanvas.Pen.Color := AShadowColor;
  ACanvas.LineTo((ARect.Left + ARect.Right) div 2, ARect.Top);
  ACanvas.Pen.Color := AHiglighColor;
  ACanvas.LineTo(ARect.Right, ARect.Bottom);
  ACanvas.LineTo(ARect.Left, ARect.Bottom);
end;

procedure DrawDown3DTriangle(ACanvas: TCanvas; const ARect: TRect;
  AHiglighColor: TColor = clBtnHighlight; AShadowColor: TColor = clBtnShadow);
begin
  ACanvas.MoveTo(ARect.Right, ARect.Top);
  ACanvas.Pen.Color := clBtnHighlight;
  ACanvas.LineTo((ARect.Left + ARect.Right) div 2, ARect.Bottom);
  ACanvas.Pen.Color := clBtnShadow;
  ACanvas.LineTo(ARect.Left, ARect.Top);
  ACanvas.LineTo(ARect.Right, ARect.Top);
end;

function CalcGridRectTriangleSort(const ACellRect: TRect; AMargin: Integer = 6;
  AAlign: TAlignment = taRightJustify): TRect;
var
  LWidth: Integer;
begin
  Result := ACellRect;
  Inc(Result.Left, AMargin);
  Inc(Result.Top, AMargin);
  Dec(Result.Bottom, AMargin);
  Dec(Result.Right, AMargin);
  LWidth := Result.Bottom - Result.Top;
  case AAlign of
    taLeftJustify: Result.Right := Result.Left + LWidth;
    taRightJustify: Result.Left := Result.Right - LWidth;
    taCenter: begin
      Result.Left := (Result.Left + Result.Right - LWidth) div 2;
      Result.Right := Result.Left + LWidth;
    end;
  end;
end;

procedure TForm1.StringGridDrawCell(ASender: TObject; ACol,
  ARow: Integer; ARect: TRect; AState: TGridDrawState);
begin
  if (ARow = 0) and (ACol = Ord(FPrevSort)) then begin
    ARect := CalcGridRectTriangleSort(ARect);
    if FForwardSorted then
      DrawDown3DTriangle(TStringGrid(ASender).Canvas, ARect)
    else
      DrawUp3DTriangle(TStringGrid(ASender).Canvas, ARect)
  end;
end;

...
Рейтинг: 0 / 0
05.03.2021, 10:51
    #40050994
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
DimaBr, вопрос в том, каким образом можно реализовать подобную идею?
...
Рейтинг: 0 / 0
05.03.2021, 11:01
    #40050998
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
_Vasilisk_, спасибо
И тут же подскажите, пожалуйста, за что отвечает ф-я CalcGridRectTriangleSort и что значит FPrevSort и FForwardSorted в TForm1.StringGridDrawCell, кателок что-то не варит или все же мой скил слабоват. И подскажите, я правильно понял: использовать в titleclick нужно StringGridDrawCell?
...
Рейтинг: 0 / 0
05.03.2021, 11:06
    #40051000
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
В Эхлибе, сабж - штатная возможность.
Странно, что в 21 веке кто-то еще работает в ущербным делфийским DBGrid.
...
Рейтинг: 0 / 0
05.03.2021, 11:09
    #40051002
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
L_argo, подскажите сылочкой пожалуйста где можно скачать ehlib для delphi 7
...
Рейтинг: 0 / 0
05.03.2021, 12:26
    #40051026
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
bors
L_argo, подскажите сылочкой пожалуйста где можно скачать ehlib для delphi 7
Внезапно - http://www.ehlib.com

авторSupport IDEs: Borland Delphi 7 – 2006, CodeGear Delphi 2007, RAD Studio 2009, Embarcadero RAD Studio 2010, XE - XE10.4, Lazarus (Win32/Linux), MS Visual Studio.
...
Рейтинг: 0 / 0
05.03.2021, 13:09
    #40051036
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
bors
за что отвечает ф-я CalcGridRectTriangleSort
Внезапно: за определение прямоугольника где нужно рисовать треугольник
bors
что значит FPrevSort и FForwardSorted
Это мои флаги, чтобы определить по какому столбцу и в каком направлении отсортированы данные
bors
правильно понял: использовать в titleclick нужно StringGridDrawCell?
Нет. StringGridDrawCell это обработчик события TStringGrid.OnDrawCell. В OnTitleClick вы должны запомнить какие столбцы и как сортировать, а потом вызвать StringGrid.Refresh

У меня сделано так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
// Обработчик события TStringGrid.OnMouseUp
procedure TForm1.StringGridMouseUp(ASender: TObject;
  AButton: TMouseButton; AShift: TShiftState; AX, AY: Integer);
var
  LGrid: TStringGrid absolute ASender;
  LCol, LRow: Integer;
begin
  if AButton = mbLeft then begin
    LGrid.MouseToCell(AX, AY, LCol, LRow);
    if LRow = 0 then begin
      if LCol = FPrevSort then
        FForwardSorted := not FForwardSorted
      else begin
        FPrevSort := LCol;
        FForwardSorted := True;
      end;
      GridSort(FPrevSort, FForwardSorted); // Процедура сортировки данных в гриде
      FFiles.RefreshGrid(LGrid);
      LGrid.Invalidate;
    end;  // if LRow = 0 then begin
  end;  // if AButton = mbLeft then begin
end;
...
Рейтинг: 0 / 0
05.03.2021, 13:13
    #40051038
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
у каждого свои велосипеды...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.03.2021, 13:14
    #40051039
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
_Vasilisk_,

спасибо

Но подскажите еще как это прикрутить к DBGrid, там нет события .OnDrawCell
...
Рейтинг: 0 / 0
05.03.2021, 13:15
    #40051040
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
asutp2,

Спасибо за идею и помощь
...
Рейтинг: 0 / 0
05.03.2021, 13:52
    #40051052
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
...
Рейтинг: 0 / 0
05.03.2021, 14:00
    #40051057
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
_Vasilisk_,

да, но тут больше параметров нужно передать, нежели требуется для стандартного обработчика события
...
Рейтинг: 0 / 0
05.03.2021, 14:01
    #40051058
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
bors
да, но тут больше параметров нужно передать, нежели требуется для стандартного обработчика события
Вы издеваетесь?
...
Рейтинг: 0 / 0
05.03.2021, 14:13
    #40051062
bors
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
_Vasilisk_, прошу прощения если достаточно глуп чтоб не понять этого
...
Рейтинг: 0 / 0
05.03.2021, 14:14
    #40051064
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нарисовать треугольник в Title DBGrid
как-то так
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Нарисовать треугольник в Title DBGrid / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]