AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

im Stringgrid Zellen total sperren

Ein Thema von Hansa · begonnen am 15. Nov 2004 · letzter Beitrag vom 17. Nov 2004
 
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: im Stringgrid Zellen total sperren

  Alt 16. Nov 2004, 19:39
Ich habe Unions Beispiel etwas umgebaut, aber ich steh anscheinend mit dem OnSelectCell auf Kriegsfuß.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
    AktRow : integer;
    function ZelleZulaessig(ACol,ARow: integer): boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses hauptmod;

{$R *.dfm}

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if (key = #13) then begin
    if StringGrid1.Col = 1 then
      StringGrid1.Col := 4
    else begin
      StringGrid1.Col := 1;
      StringGrid1.RowCount := StringGrid1.RowCount + 1;
      StringGrid1.Row := StringGrid1.Row + 1;
    end
  end;
end;

function TForm1.ZelleZulaessig (ACol,ARow: integer): boolean;
var z : boolean;
begin
  z := false;
  if ACol in [1,4] then with StringGrid1 do begin
    z := AktRow = ARow; // zumindest mal die richtige Zeile !
    if z then begin // jetzt kommt Spalte dran
      if ACol = 1 then begin
        z := Trim (Cells[ACol,ARow]) = '';
      end;
    end;
  end;
  ZelleZulaessig := z;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
   if AktRow < ARow then
     AktRow := ARow;
   Canselect := ZelleZulaessig(ACol,ARow);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  AktRow := 0;
end;

end.
Ist eine Zeile gefüllt, so kann sie jetzt nicht mehr selektiert werden. Das gilt auch für die Spalten 2 und 3 von insges. 4, egal in welcher Zeile. Nun ist noch folgendes : Spalte 4 darf nur selektiert werden, sofern in Spalte 1 etwas steht. Und Spalte 1 darf nicht mehr editiert werden können, sofern man sie verläßt.

Mit obigem Code sieht es jetzt so aus : nur in jeder 2. Zeile geht der Cursor nach verlassen der 4. Spalte in die 1. der nächsten Zeile weiter. Selektieren kann ich allerdings per Maus die Spalten 1 und 4 der letzten Zeile.
Gruß
Hansa
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz