Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Вниз

строка в DBGrid   Найти похожие ветки 

 
Sergey-ZZZ   (2003-05-15 16:22) [0]

Подскажите как сделать. Хочу чтобы при наведении в DBGrid на строку выводился хинт с определенной информацией. Причем в каждой строке свой. Трудность у меня в том что не знаю как в событии OnMouseMove определить строку в которой находится мыша. Извиняюсь если знатокам покажется вопрос детским. Никогда этого не делал.
Спасибо.


 
@@Le   (2003-05-15 16:27) [1]

...........OnMouseMove(......)
var
gc : TGridCoord;
begin
gc := DBGrid1.MouseCoord(X, Y);
end;

Y - строка
X - столбец


 
sniknik   (2003-05-15 16:41) [2]

> Трудность у меня в том что не знаю как в событии OnMouseMove определить строку ...
не проблема
procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var GCord: TGridCoord;
begin
GCord:= TDBGrid(Sender).MouseCoord(X, Y);
Label1.Caption:= IntToStr(GCord.X);
Label2.Caption:= IntToStr(GCord.Y); //< ------- строка -----
end;

но боюсь трудности тут только начинаются :о)). Хинт то наверняка от данных с строке зависеть будет?


 
гончий   (2003-05-15 16:43) [3]

Не вижу здесь особых трудностей, заморозить грид сбегать к полю и записи под мышкой на OnHint, выловить значение и вернуться обратно :)Разморозить грид :)


 
SERGEY-ZZZ   (2003-05-15 16:44) [4]

Для sniknik
Да, ты прав хинт будет от данных зависеть :))))


 
SERGEY-ZZZ   (2003-05-15 16:46) [5]

Для "Гончего"
Я не понял что значит заморозить грид.
Если можно, то код.


 
sniknik   (2003-05-15 16:58) [6]

гончий (15.05.03 16:43)
вот это я и называю трудностями.

SERGEY-ZZZ © (15.05.03 16:46)
нельзя просто так получить данные из какойто видимой ячейки, нужно перемещатся на строку в связанном НД. делать ее текущей. потом возвращатся. + куча связанных с этими действиями мелких трудностей (как не дать гриду дергатся и выстанывливать курсор на середину, к примеру).


 
KoluChi   (2003-05-15 18:34) [7]

Все зависит от выбранного DBGrid
для стандартного TDBGrid согласен с sniknik © (15.05.03 16:58)
для TDBGridEh - есть метод GetEditText(X, Y)
для TdxDBFGrid - у строки есть свойство Values[].


 
KoluChi   (2003-05-15 18:39) [8]

>SERGEY-ZZZ © (15.05.03 16:46)
Заморозить грид (да и все контролы от набора данных)
DBGrid.DataSource.DataSet.DisableControls();
"Разморозить"
DBGrid.DataSource.DataSet.EnableControls();


 
sniknik   (2003-05-15 20:14) [9]

KoluChi © (15.05.03 18:34)
ну на самом деле не трудно то же самое и для стандартного TDBGrid-а сделать, не обязательно на нестандартные компоненты переходить.

а для хинтов просто позаботится заранее список из них составить пока запись в НД текушая, благо их немного видимых. на onDrawDataCell к примеру повесится... :о)). дальше ясно думаю.


 
ЮЮ   (2003-05-16 03:01) [10]

Бегать по DataSety - не есть хорошо (а вдруг НД редактируется), для этого у DBGrid-a есть DataLink, как раз на столько строк НД, сколько отображается в Gride.


 
KoluChi   (2003-05-16 07:47) [11]

>sniknik © (15.05.03 20:14)
Я описываю возможности нестандартных DBGrid, вдруг человек пользуется одним из них.

>ЮЮ © (16.05.03 03:01)
где это вы нашли у TDBGrid DataLink? В D5 я его не увидел.
Может плохо искал :)


 
sniknik   (2003-05-16 07:59) [12]

можно и даталинк, тоже возможность

KoluChi © (16.05.03 07:47)
> где это вы нашли у TDBGrid DataLink? В D5 я его не увидел.
Может плохо искал :)

опиши свой класс и он будет доступен
ну к примеру
TMyDBGrid = class(TDBGrid)
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
....

procedure TMyDBGrid.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);
var lRow, lCol : Integer;
DrawColumn: TColumn;
P: TSortPoint;
begin
if csLoading in ComponentState then begin
inherited DrawCell(ACol, ARow, ARect, AState);
Exit;
end;
lCol:= ACol;
lRow:= ARow;
if dgTitles in Options then dec(lRow);
if dgIndicator in Options then dec(lCol);

if not ((gdFixed in AState) or ((gdFocused in AState) and Focused)) then
if Assigned( DataLink {вот и далее по тексту}) and DataLink.Active and (DataLink.ActiveRecord = lRow) then begin
Canvas.Brush.Color:= clInfoBk;
Canvas.Font.Assign(Font);
Canvas.Font.Color:= clBlack;
DrawColumn:= Columns[lCol];
WriteText(Canvas, ARect, 2, 2, DrawColumn.Field.DisplayText, DrawColumn.Alignment, UseRightToLeftAlignmentForField(DrawColumn.Field, DrawColumn.Alignment));
Exit;
end;
inherited DrawCell(ACol, ARow, ARect, AState);
if (gdFixed in AState) and (SortPoint <> nil) and (ARect.Left < ARect.Right-10) then begin
if SortPoint.Field = ACol then begin
if SortPoint.Order = 1 then AcsDescImages.Draw(Canvas, ARect.Right-10, ARect.Top+6, 0, True)
else AcsDescImages.Draw(Canvas, ARect.Right-10, ARect.Top+6, 1, True);
Exit;
end;
P:= SortPoint.Next;
While P <> nil do begin
if P.Field = ACol then begin
if P.Order = 1 then AcsDescImages.Draw(Canvas, ARect.Right-10, ARect.Top+6, 2, True)
else AcsDescImages.Draw(Canvas, ARect.Right-10, ARect.Top+6, 3, True);
Exit;
end;
P:= P.Next;
end;
end;
end;


 
KoluChi   (2003-05-16 08:14) [13]

>sniknik © (16.05.03 07:59)
понятно, но все равно ушли от стандартного TDBGrid :)


 
sniknik   (2003-05-16 08:47) [14]

KoluChi © (16.05.03 08:14)
ну это же тоже не обязательно. если в onDrawDataCell формировать списочек хинтов то будет "строго" стандартный грид.

просто если сам пишеш то не нужно постоянно всякме "левые" компоненты доставлять (тем более целый пакет изз одного свойства которое самому за пять минут сделать можно), во всяком случае я количество "левых" стараюсь к миниму свести.

p.s. а вобще все это фигня, вот разве что пчелы ... :о))) (в смысле лиш бы работало)


 
roottim   (2003-05-16 09:30) [15]

вот этот код работает типа как tooltip

type
TMyDbGrid = class (TCustomDbGrid)
public
constructor Create(AOwner: TComponent); override;
end;


TForm1 = class(TForm)
Dbf1: TDbf;
DS1: TDataSource;
bGrid: TButton;
sb1: TStatusBar;
procedure bGridClick(Sender: TObject);
private
{ Private declarations }
public
gr1: TMyDbGrid;
procedure gr1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.bGridClick(Sender: TObject);
begin
gr1 := TMyDbGrid.Create(Self);
gr1.DataSource := ds1;
gr1.Height := 500;
gr1.Align := alTop;
gr1.OnMouseMove := Self.gr1MouseMove;
end;

{ TMyDbGrid }

constructor TMyDbGrid.Create;
begin
inherited Create(AOwner);
Self.Parent := TWinControl(AOwner);
end;

procedure TForm1.gr1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var call: TGridCoord;
vActiveRec: Integer;
begin
call := gr1.MouseCoord(X,Y);
sb1.SimpleText := Format("ROW: %d COL: %d ActiveRec: %d BufCount: %d RecCount: %d" , [call.Y, call.X, gr1.DataLink.ActiveRecord,
gr1.DataLink.BufferCount, gr1.DataLink.RecordCount]);

if (call.Y > 0) and (call.X > 0) then
begin
vActiveRec := gr1.DataLink.ActiveRecord;
gr1.DataLink.ActiveRecord := call.Y - 1;
caption := gr1.DataLink.Fields[call.X - 1].DisplayText;
gr1.DataLink.ActiveRecord := vActiveRec;
end;

end;

end.


 
Exp   (2003-05-17 21:49) [16]

URL http://ckk.renet.ru/bvsoft/download/bvcomp.zip

Сам пользуюсь!!!!

Спасибо Владимиру Борзову. Трижды УРА!!!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.06.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.022 c
1-13223
Rise
2003-05-27 12:39
2003.06.05
Сохранение числа?


1-13315
Вопрошающий
2003-05-25 11:31
2003.06.05
Повторяющиеся символы


3-13091
Grey_g
2003-05-15 09:48
2003.06.05
Активная запись


1-13114
Apachi
2003-05-23 09:52
2003.06.05
Дочерние окна


1-13171
Новенький
2003-05-26 11:35
2003.06.05
TActionPopupMenuBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский