Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus (https://www.delphipraxis.net/145986-tms-tadvstringgrid-mehrere-zeilen-markieren-mit-der-maus.html)

Kostas 11. Jan 2010 23:19


TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus
 
Hallo Zusammen,

TMS TAdvStringGrid Version 4.6.0.0

das Problem vorab: wenn ich mit der linken Maus auf die erste Zeile klicke, die linke Maustaste
gedruckt halte und runter ziehe so das weitere Zeilen markiert werden, so werden sie zwar als
Markiert dargestellt, sind jedoch nicht markiert im Sinne von tgGrid.RowSelect[r]:=true;
Tippe ich jedoch jede einzelne Zeile mit gedruckert Strg-Taste, so werden sie markiert dargestellt
und sind auch aufgelistet in tgGrid.RowSelect[r].


Das Grid besteht aus drei Spalten und mehreren Zeilen.
Hab RowSelect eingestellt, so dass die komplette Zeile markiert ist, beim anklicken irgend einer Zelle.

Ich mochte schnell mehrere Zeilen marktieren, und Programmtechnisch die markierten Zeilen nach einer Aktion
einzeln wieder demarkieren. Das geht mit tgGrid.RowSelect[RowNo]:=false;
Allerdings nicht wenn ich die Zeilen nicht einzeln mit gedruckert Strg-Taste markiere.

Hat jemand eine Idee?

Gruß Kostas

exilant 12. Jan 2010 08:26

Re: TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus
 
Versuchs mal mit "SelectedRowCount" und "SelectedRow[x]" also sowas wie

Delphi-Quellcode:
for i := 0 to grid.selectedrowcount -1 do begin
  grid.cells[0, grid.selectedrow[i]] := '->';
end;

Kostas 12. Jan 2010 09:41

Re: TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus
 
Zitat:

Zitat von exilant
Versuchs mal mit "SelectedRowCount" und "SelectedRow[x]" also sowas wie

Delphi-Quellcode:
for i := 0 to grid.selectedrowcount -1 do begin
  grid.cells[0, grid.selectedrow[i]] := '->';
end;

irgend wie führt kein Weg dort hin.
Wie gesagt, wenn ich die Zeilen mit gedruckter Strg-Taste markiere ist es kein Problem
die Selektierten Zeilen einzeln wieder abzuwehlen.

Interessant ist, ich markiere fünf Rows durch drüberziehen:
MessageDlg(IntToStr(Grid.SelectedRowCount), mtWarning, [mbOK], 0); >>zeigt 5 an
Grid.ClearRowSelect;
MessageDlg(IntToStr(Grid.SelectedRowCount), mtWarning, [mbOK], 0); >>zeigt 0 an

Die Rows sind jedoch optisch immer noch markiert.
Also sind die Rows irgend wie markiert und doch nicht. :-(

Mache ich das gleiche indem ich die fünf Rows einzel markiere mit gedrucker Strg-Taste
sind die Rows danach auch demarkiert.

Hat jemand eine Idee?

Gruß Kostas

exilant 12. Jan 2010 10:04

Re: TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus
 
Zitat:

Zitat von Kostas
Interessant ist, ich markiere fünf Rows durch drüberziehen:
MessageDlg(IntToStr(Grid.SelectedRowCount), mtWarning, [mbOK], 0); >>zeigt 5 an
Grid.ClearRowSelect;
MessageDlg(IntToStr(Grid.SelectedRowCount), mtWarning, [mbOK], 0); >>zeigt 0 an

Mal ein Schuss ins blaue (ich kann hier gerade nicht testen): nach "grid.ClearRowSelect" noch ein "grid.invalidate" absetzen.
Klappt das?

gruss

Kostas 12. Jan 2010 10:09

Re: TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus
 
Zitat:

Zitat von exilant
Zitat:

Zitat von Kostas
Interessant ist, ich markiere fünf Rows durch drüberziehen:
MessageDlg(IntToStr(Grid.SelectedRowCount), mtWarning, [mbOK], 0); >>zeigt 5 an
Grid.ClearRowSelect;
MessageDlg(IntToStr(Grid.SelectedRowCount), mtWarning, [mbOK], 0); >>zeigt 0 an

Mal ein Schuss ins blaue (ich kann hier gerade nicht testen): nach "grid.ClearRowSelect" noch ein "grid.invalidate" absetzen.
Klappt das?

gruss

nein leider nicht.

Delphi-Quellcode:
  MessageDlg(IntToStr(grid.SelectedRowCount), mtWarning, [mbOK], 0);
  grid.ClearRowSelect;
  grid.invalidate;
  MessageDlg(IntToStr(grid.SelectedRowCount), mtWarning, [mbOK], 0);
Die Rows sind immer noch "markiert"

Gruß Kostas

exilant 12. Jan 2010 13:11

Re: TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus
 
Vielleicht hilf das hier.

Die Selektierung läst sich folgendermassen aufheben:

Delphi-Quellcode:

procedure TForm1.Unselect;
var t : tgridrect;
begin
   t.Left := MyGrd.col;  t.Right := MyGrd.col;
   t.top := MyGrd.row;  t.bottom := MyGrd.row;
   MyGrd.Selection := t;
end;

Danach ist nur noch die vorher angewählte Zelle selektiert.

Kostas 12. Jan 2010 14:38

Re: TMS TAdvStringGrid mehrere Zeilen markieren mit der Maus
 
Zitat:

Zitat von exilant
Vielleicht hilf das hier.

Die Selektierung läst sich folgendermassen aufheben:

Delphi-Quellcode:

procedure TForm1.Unselect;
var t : tgridrect;
begin
   t.Left := MyGrd.col;  t.Right := MyGrd.col;
   t.top := MyGrd.row;  t.bottom := MyGrd.row;
   MyGrd.Selection := t;
end;

Danach ist nur noch die vorher angewählte Zelle selektiert.

Hallo exilant,
ich habe das Problem lösen können. :-)

Es liegt an der Eigenschaft Look.
Office 2007, Windows Vista und Windows 7 entfernen die Auswahl nicht!
Alle andere Looks gehen wie z.B.: Windows XP

Mann sucht sich einen Wolf und dann ist es so etwas Super Gemeines.
Ob es jetzt ein Bug ist ober by Design der Komponente ist mich nicht klar.
Auf jeden Fall Fuck auf Vista und nehme XP Themes.


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  Memo1.lines.clear;
  for i := 1 to Grid.RowCount-1 do
  begin
    if Grid.RowSelect[i] then
    begin
      Grid.RowSelect[i]:=false;
      Memo1.lines.add(Grid.cells[1,i]);
    end;{if}
  end;

end;
Gruß kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz