AGB  ·  Datenschutz  ·  Impressum  







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

Stringgrid: Scroll-Focus entfernen

Ein Thema von Int3g3r · begonnen am 25. Apr 2019 · letzter Beitrag vom 26. Apr 2019
Antwort Antwort
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

Stringgrid: Scroll-Focus entfernen

  Alt 25. Apr 2019, 12:18
Guten Tag,

Ich möchte im Stringgrid eine Zelle komplett "Deselektieren".
Code:
StringGrid1.Selection := NoSelection ;
Führt leider nicht zum gewünschten Erfolg. Dieser entfernt nur die "Markierung", die Zelle ist aber immer noch selektiert (Bild).

Da das StringGrid kein "OnCellClick" Event verfügt muss ich das "SelectCell" Event verwenden.
Sobald nun aber der user im Grid scrollt wird nun mein "SelectCell" Event ausgelöst was nicht passieren darf.
Im Prinzip muss sich die letzte Coloum wie eine Checkbox verhalten. Wenn man Klickt wird der Wert darin verändert. Aber nicht beim Scrollen.

Delphi-Quellcode:
procedure TfrmCSV.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
const
      NoSelection : TGridRect = (Left: -1; Top: -1; Right: -1; Bottom: -1);
begin
      if ACol = StringGrid1.ColCount-1 then
    begin
       if StringGrid1.Cells[ACol,ARow] = 'Neinthen
       begin
         StringGrid1.Cells[ACol,ARow] := 'Ja';
       end
       else
       begin
         StringGrid1.Cells[ACol,ARow] := 'Nein';
       end;
    end;
    StringGrid1.Selection := NoSelection ;
end;
Wie lässt sich dies bewerkstelligen ?

Mfg Int3g3r
Miniaturansicht angehängter Grafiken
stringridfocus.jpg  
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Stringgrid: Scroll-Focus entfernen

  Alt 25. Apr 2019, 14:30
Hallo,
fang doch erst mal vorn an.

Zitat:
Da das StringGrid kein "OnCellClick" Event verfügt muss ich das "SelectCell" Event verwenden.
Was soll denn bei einem "OnCellClick" passieren?
Es gibt ja KeyDown und MouseDown bzw. -Up.

Dieser Murks mit dem Mißbrauchen des SelectCell habe ich manchmal auch, das gibt bei mir immer Ärger.
Heiko
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Stringgrid: Scroll-Focus entfernen

  Alt 25. Apr 2019, 14:44
Hallo,
fang doch erst mal vorn an.

Zitat:
Da das StringGrid kein "OnCellClick" Event verfügt muss ich das "SelectCell" Event verwenden.
Was soll denn bei einem "OnCellClick" passieren?
Es gibt ja KeyDown und MouseDown bzw. -Up.

Dieser Murks mit dem Mißbrauchen des SelectCell habe ich manchmal auch, das gibt bei mir immer Ärger.
Das was oben im Code steht muss passieren.
Also beim klicken auf die Zelle soll darin "Ja" eingetragen werden.
Beim erneuten klicken soll "Nein" eingetragen werden.

Wie du oben siehst brauche ich irgendwoher die Information welche Zelle angeklickt wurde um das "Ja/Nein"
in die richtige Zelle einzutragen.

Das wäre schon alles.

EDIT:

Habe ne Lösung gefunden durch deinen Tipp.
Ich wusste nicht das eine procedure existiert die X,Y Koordinaten in eine Col/Row umwandeln kann.
Code:
StringGrid1.MouseToCell(X,Y, Col,Row);
Kann mir jemand erklären wie man folgendes Konstrukt nennt ?
Code:
procedure MouseToCell(X: Integer; Y: Integer; var ACol: Longint; var ARow: Longint);
Dies ist doch im prinzip eine procedure die mehrere Werte zurückgibt, oder nicht ?
1. ) Eine Procedure hat per definition keinen Rückgabewert
2. ) Eine Funktion hingegen hat nur einen Rückgabewert.

Dies irritiert mich ein wenig.

Besten Dank!
Int3g3r

Geändert von Int3g3r (25. Apr 2019 um 15:13 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Stringgrid: Scroll-Focus entfernen

  Alt 25. Apr 2019, 16:13
Hallo,
eine Prozedur hat keinen Rückgabewert, kann aber Rückgabeparameter (Referenzparameter) haben.


function Foo1(S: String): Integer;
S: Parameter
: Integer = Rückgabewert der Funktion

procedure Proc1(S: String);
S: Parameter

procedure Proc2(S: String; var X: Integer);
S: Parameter - Wertparameter
X: Parameter - Referenzparameter
Wird X in der Prozedur verändert, ändert sich auch der Wert der Variable das Aufrufers

procedure Proc2(S: String; var X: Integer; Y: Integer);
S: Parameter
X: Parameter
Y: Parameter = Referenzparameter
Wird X in der Prozedur verändert, ändert sich auch die Variable das Aufrufers
Wird Y in der Prozedur verändert, ändert sich die Variable das Aufrufers NICHT

Das var kann man sich wie einen Pointer (eine Referenz) auf die eigentliche Variable beim Aufrufer vorstellen, der an die Prozedur übergeben wird.

http://bergt.de/workshop/delphi/html/delphi39.htm
Heiko

Geändert von hoika (26. Apr 2019 um 08:34 Uhr)
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Stringgrid: Scroll-Focus entfernen

  Alt 26. Apr 2019, 08:35
procedure Proc2(S: String; var X: Integer; Y: Integer);
S: Parameter
X: Parameter
Y: Parameter = Referenzparameter
Wird X in der Prozedur verändert, ändert sich auch die Variable das Aufrufers
Wird Y in der Prozedur verändert, ändert sich die Variable das Aufrufers NICHT

Das var kann man sich wie einen Pointer (eine Referenz) auf die eigentliche Variable beim Aufrufer vorstellen, der an die Prozedur übergeben wird.

http://bergt.de/workshop/delphi/html/delphi39.htm
"s,y" sind normale übergabeparameter
Die "var x" existiert dort wo sie aufgerufen wird:
Delphi-Quellcode:
procedure btnCSVClick(Sender: TObject);
var Zahl1: integer;
   begin
          proc2(test, zahl1, zahl2 );
   end;
Somit wird beim aufruf eine druch die Variable "X" eine Referenz auf Zahl1 mitgegeben ?

Wäre dann folgendes zulässig ?
Delphi-Quellcode:
procedure btnCSVClick(Sender: TObject);
var Zahl1: integer;
    X: integer; //X wird ja bereits in der proc2 als variable verwendet
   begin
          proc2(test, zahl1, zahl2 );
   end;
Danke für die Hilfe,

Int3g3r

Geändert von Int3g3r (26. Apr 2019 um 08:38 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Stringgrid: Scroll-Focus entfernen

  Alt 26. Apr 2019, 08:48
Hallo,
nein, ist nicht richtig.

Delphi-Quellcode:
procedure proc2(s: String; var x: Integer);
begin
  if s='then
  begin
    // diverser Code1
    x:= 1;
  end
  else
  begin
    // diverser Code2
    x:= 2;
  end;
end;

procedure proc1;
var
  s: String;
  x: Integer;
begin
  s:= 'Test';
  x:= 10;
  proc2(s,x);

     x ist ? -> 2, weil in proc2 ja steht
     // diverser Code2
     x:= 2;
  
  s:= '';
  proc2(s,x);

     x ist ? -> 1, weil in proc2 ja steht
     // diverser Code1
     x:= 1;
end;
Aber nu kommst !

Delphi-Quellcode:
procedure proc2(Max: String; var Moritz: Integer);
begin
  if Max='then
  begin
    // diverser Code1
    Moritz:= 1;
  end
  else
  begin
    // diverser Code2
    Moritz:= 2;
  end;
end;

procedure proc1;
var
  s: String;
  x: Integer;
begin
  s:= 'Test';
  x:= 10;
  proc2(s,x);

     x ist ? -> 2, weil in proc2 ja steht
     // diverser Code2
     Moritz:= 2;
  
  s:= '';
  proc2(s,x);

     x ist ? -> 1, weil in proc2 ja steht
     // diverser Code1
     Moritz:= 1;
end;
Die in proc1 definierte Variable x hat nichts mit dem Parameter x in proc2 zu tun!
Das war im Bsp. 1 einer Zufall. OK, war Absicht

In den Delphi-Quellen wird deshalb bei Parameter immer ein A vorangestellt (ARow).
Das dient einer besseren optischen Unterscheidung zwischen Parametern und Variablen.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 06:20 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