Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: im Stringgrid Zellen total sperren

  Alt 15. Nov 2004, 22:08
Zitat von Hansa:
Hi,

in einem StringGrid muß ich verhindern, daß mit der Maus auf Zellen, die nicht mehr verändert werden sollen, zugegriffen wird. Die Tastatur habe ich hierfür voll im Griff, aber mit der Maus könnte noch Unheil angerichtet werden, indem Zellen angeklickt werden, die nicht mehr editiert werden sollen.

Ich kann es am besten anhand des angehängten Screenshots erklären :

das rot eingekreiste "a" ist der momentane Standort des Cursors. Sofern das Grid so aussieht, sollen die grün umrandeten Zellen oben nicht mehr editiert werden können. Am besten wäre es, gar nicht mehr zuzulassen, daß eine der grünen Zellen überhaupt selektiert werden kann.

Aber irgendwie gelingt mir das nicht vollständig. Das Hauptproblem liegt wohl darin, daß ich nicht weiß, wo Col und Row zugeswiesen werden, um dann gezielt zu reagieren. Wie mache ich das am besten ?
Hi Hansa,

so gehts:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    function IsRowComplete(ARow : integer) : boolean;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.IsRowComplete(ARow: integer): boolean;
var
   iCol : integer;
begin
   result := true;
   for iCol := StringGrid1.FixedCols to StringGrid1.ColCount-1 do
   begin
      if trim(StringGrid1.Cells[iCol, ARow]) = 'then
      begin
         result := false;
         break;
      end;
   end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
   // Wenn reihe komplett ausgefüllt ist, nicht mehr
   // anwählen lassen
   Canselect := not IsRowComplete(ARow)
end;

end.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat