Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   stringgrid auslesen (https://www.delphipraxis.net/164689-stringgrid-auslesen.html)

Hartfrid Krause 25. Nov 2011 08:34

stringgrid auslesen
 
Ich will wahlergebnisse, die in einer stringgrid eingegeben werden, als integerwerte prüfen und am ende abspeichern.
Mache ich alles mit edit-Feldern klappt es, ist aber umständlich.

Eine stringgrid, die nur Zahlen annimmt, ist vorhanden.

Wenn ich eine Zelle Zahlen eingebe und bevor ich zur nächsten Zelle gehe, soll die Zahl als integer-wert in ein array übernommen werden (Wahlergebnisse[1..15]) und überprüft werden.
und das klappt nicht.
Zum Auslesen einzelner Zellen .....

Delphi-Laie 25. Nov 2011 08:37

AW: stringgrid auslesen
 
Quellcode?

Hartfrid Krause 25. Nov 2011 11:49

AW: stringgrid auslesen
 
Mit den beiden Prozeduren können nur in der 1. Spalte des stringgrid zahlen eingegeben werdeen.
Sie erscheinen auf dem Bildschirm.
Diese eingegebenen Zahlenwerte will ich auslesen und in einem array einfangen, um sie weiter zu bearbeiten.
Mit der dritten prozedur soll das auslesehn geschehen, aber wie???


procedure TForm11.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
with StringGrid1 do
if Col = 1 then Stringgrid1.Options := Stringgrid1.Options + [goEditing]+ [goTabs]
else Stringgrid1.Options := Stringgrid1.Options - [goEditing]-[goTabs];
end;


procedure TForm11.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
begin
beep;
key := #0;
end;
end;


procedure tform11.dateneingeben(sender:TObject);
var i:integer;
begin
with stringgrid1 do
begin
for i:=3 to 15 do ...???...cells[1,i]...???

end;
end;

p80286 25. Nov 2011 12:59

AW: stringgrid auslesen
 
Delphi-Quellcode:
MyArray[a,b]:=tryStrtoInt(Stringgrid1.Cells[x,y]);
Besser wäre es allerdings, zuerst die Daten in das array zu übernehmen, und dieses dann im Stringgrid anzuzeigen.

Gruß
K-H

Hartfrid Krause 27. Nov 2011 10:33

AW: stringgrid auslesen
 
So klappt das noch nicht.
Ich will neue Wahlergebnisse direkt in eine stringgrid eingeben und sie dann in einem array wahlsatz[1..1] abspeichern.
In der Procedure tabelleformatieren wird die stringgrid vorbereitet und mit "struktur" die Partzeinamen etc. angezeigt. In col1 sollen dann die Zahlenwerte eingegeben werden.
Die Prozeduren stringgrid1keydown und sringgrid1keypressed sollen nur die Eingaben von ganzen Wahlen ermöglichen.
UNKLAR die Procedur dateneingeben, die so nicht korrekt ist. Hier sollen die Werte eingegeben werden und sie dann im array dann zu speichern.




procedure tform11.tabelleFormatieren(sender:TObject);
var i:integer;
BEGIN
with stringgrid1 do
begin
rowcount:=16;
colcount:=2;
form2.wahldatstruktur(sender);
cells[0,0]:='Parteien';
cells[1,0]:='Wahlergebnis';
for i:=1 to 15 do cells[0,i]:=struktur[i];
colwidths[0]:=8*groupbox5.Width div 30;
colwidths[1]:=6*groupbox5.Width div 30;
END;
END;

procedure TForm11.StringGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
with StringGrid1 do
if Col = 1 then Stringgrid1.Options := Stringgrid1.Options + [goEditing]+ [goTabs]
else Stringgrid1.Options := Stringgrid1.Options - [goEditing]-[goTabs];
end;


procedure TForm11.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
begin beep; key := #0; end;
end;


procedure tform11.dateneingeben(sender:TObject);
var i:integer;
begin
with stringgrid1 do
for i:=3 to 15 do
tryStrtoInt(Stringgrid1.Cells[1,i],wahlsatz[i]); //klappt so noch nicht
end;

Bummi 27. Nov 2011 11:22

AW: stringgrid auslesen
 
Ich weiß ja nicht was alles in Dein Array soll, das sollte für Dein 2 * 16 Grid passen ...
Delphi-Quellcode:
type
Twahlsatz=Array[0..1,0..15] of Integer;
var
wahlsatz:Twahlsatz;

Hartfrid Krause 27. Nov 2011 12:12

AW: stringgrid auslesen
 
a. Im wahlsatz array stehen nur wahlergebnisse und Kürzel für Zeit und Land.
Mein Problem ist wie ich Eingaben in stringgrid in das array "herüberschiebe".

b.In den alten edit-Feldern konnte ich definieren, durch die returntaste zum nächsten Feld zu gelangen - ist dies auch in stringgrid möglich?

Bummi 27. Nov 2011 12:40

AW: stringgrid auslesen
 
Ich würde ein Array of Record nehmen und zuweisen, ich weiß nicht wo genau Du hängst ...

bei Form1.KeyPreview:=true; könntest Du wenn das Stringgrid den Fokus hat ganz billig so vorgehen um aus Enter ein Tab zu machen....
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=13 then Key := 9;

end;

Hartfrid Krause 28. Nov 2011 13:19

AW: stringgrid auslesen
 
Das Auslesen klappt jetzt. Es bleiben allerdings noch drei Fragen
Ich habe in dem verkürzten Programm die zu berechnenden Felder grau markiert. Hier sollte keine Eingabe möglich sein, sondern eine berechnete Ausgabe (Wahlberechtigte- Wähle= Nichtwähler usw.)
a. Wie "überspringe" ich bei Eingabe dieses graue Feld??
b. Mit der Returntaste komme ich immer noch nicht zum nächsten Feld.
c. Eigentlich möchte ich bei Verlassen jedes Feldes z.B. die Sonstigen berechnen (und anzeigen), um mögliche Fehler abzufangen (z.B. Eingabe größer mögliche Sonstige usw).Wie kann ich nach Verlassen eines Feldes solche Überprüfroutinen (etwa als Überprüfprozedur) einfügen?

Bummi 28. Nov 2011 14:15

AW: stringgrid auslesen
 
a.) procedure TForm2.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
b.)dann versuchs mal so
Delphi-Quellcode:
procedure TForm2.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  // Annahme 1 Col Fixed , fehlen nochj sonderbehandlungen für gesperrte und zu hohe Rows
  if Key=#13 then
      begin
        if TStringGrid(Sender).Col= TStringGrid(Sender).ColCount -1 then
            begin
                TStringGrid(Sender).Col:=1;
                TStringGrid(Sender).Row:= TStringGrid(Sender).Row + 1;
            end else TStringGrid(Sender).Col := TStringGrid(Sender).Col + 1;
      end;
end;
c.) könnte man zum Beispiel hier machen
procedure TForm2.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: string);


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr.
Seite 1 von 2  1 2      

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