TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)
Hallo,
Ich habe eine besondere Anforderung. Ich habe ein DBGrid, das zeigt die Daten und scrollt immer an das Ende wenn ich mit einer Suchen-Eingabe ein Locate mache. Also der richtige Datensatz wird gezeigt, das ist nicht das Problem. Also das Grid zeigt sich auf dem ganzen Bildschirm, und der aktive Datensatz ist der letzte ganz unten.
Das gefällt mir aber nicht, kann ich irgendwie dem Grid bei bringen dass bei einer Suche dann der aktive Datensatz in der Mitte des sichtbaren Bildschirmbereiches ist?
Also z.B. sind 20 Datensätze auf dem Bildschirm sichtbar (Tabelle hat z.B. insgesamt 100). Jetzt mache ich ein Locate auf Datensatz Nr. 40, dann hätte ich gerne dass das TDBGrid mit die Datensätze 30..50 anzeigt und der aktive Datensatz auf 40 zeigt.
Vieleiche hat jemand einen Tipp, nach was für Grid-Eigenschaften ich suchen könne, mir fehlt leider jeder Ansatz.
Vielen Dank für eure Hilfe.
Grüße Markus
Ich habe eine besondere Anforderung. Ich habe ein DBGrid, das zeigt die Daten und scrollt immer an das Ende wenn ich mit einer Suchen-Eingabe ein Locate mache. Also der richtige Datensatz wird gezeigt, das ist nicht das Problem. Also das Grid zeigt sich auf dem ganzen Bildschirm, und der aktive Datensatz ist der letzte ganz unten.
Das gefällt mir aber nicht, kann ich irgendwie dem Grid bei bringen dass bei einer Suche dann der aktive Datensatz in der Mitte des sichtbaren Bildschirmbereiches ist?
Also z.B. sind 20 Datensätze auf dem Bildschirm sichtbar (Tabelle hat z.B. insgesamt 100). Jetzt mache ich ein Locate auf Datensatz Nr. 40, dann hätte ich gerne dass das TDBGrid mit die Datensätze 30..50 anzeigt und der aktive Datensatz auf 40 zeigt.
Vieleiche hat jemand einen Tipp, nach was für Grid-Eigenschaften ich suchen könne, mir fehlt leider jeder Ansatz.
Vielen Dank für eure Hilfe.
Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)
Ich habs rausgefunden...
Code: Alles auswählen
BM := MyQuery.GetBookmark;
MyQuery.GotoBookmark(BM);
MyQuery.FreeBookmark(BM);
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)
Etwas direkter:
Code: Alles auswählen
TDataSet.Resync([rmcenter]);
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile)
Auf die Idee wäre ich nie gekommen, vielen Dank!
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile
wie kann ich erreichen, dass der cursor nicht in mitte sondern oben steht? danke.
Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile
kann lazarus nicht markierung im dbGrid auf erste zeile stellen?
Re: TDBGrid, Locate-Suche soll Grid auf Mitte stellen (Zeile
Ganz schönes Gewurstel, aber so habe ich das hinbekommen. Keine Ahnung, ob das nicht auch eleganter geht:
Code: Alles auswählen
uses ..., math;
...
type
TDBGrid = class(DBGrids.TDBGrid)
function GetBufferCount: integer; override;
end;
...
function TDBGrid.GetBufferCount: integer;
begin
Result := inherited GetBufferCount;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
var
aRecNr: Integer;
begin
SQLQuery1.Locate('Field1', 'SearchText', []);
aRecNr := SQLQuery1.RecNo;
SQLQuery1.RecNo := min(aRecNr + DBGrid1.GetBufferCount div 2, SQLQuery1.RecordCount - 1);
SQLQuery1.MoveBy(aRecNr - SQLQuery1.RecNo);
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;