Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi, Erfassung von Daten per StringGrid (https://www.delphipraxis.net/179089-delphi-erfassung-von-daten-per-stringgrid.html)

Vidar92 13. Feb 2014 15:00

Delphi, Erfassung von Daten per StringGrid
 
Hallo an alle.

Ich habe ein kleines großes Problem. Es handelt sich um folgendes:

Ich habe ein Projekt übernommen, um eine Veranstaltung zu retten und bräuchte dabei Hilfe, da ich kein Pro bin sondern es lediglich vor 2-3 Jahren mal in der Schule gelernt habe und ab und an mal kleinere Sachen wit TR mache um nicht alles zu verlernen.

Nun geht es um folgendes Prinzip:

Ich habe mehrere Edit-Felder, welche ich in eine StringGrid schreibe (soweit so gut das geschieht auch soweit am richtigen Ort).
Nun kommt jedoch das erste Problem:
Sobald ich neue Daten in die Edit-Felder tippe, soll er alles in die nächste Spalte schreiben, jedoch überschreibt er alle Zeilen wieder in der ersten Spalten.
Ich hab einiges ausprobiert und alte Dokumente rausgekramt, jedoch find ich nichts was mir auf die schnelle hilft.

Das zweite Problem ist folgendes:
Ich habe ein Edit-Feld welches für die Startnummern verwendet wird, nun ist es so das alle Zahlen von 0-199 Blau, 200-499 Gelb und alles über 500 rot gefärbt werden soll. Die Schriftfarbe ändert sich auch (habs mal in einer ListBox probiert), jedoch sobald ich einen neuen Wert eintippe werden die die Blau/gelb waren nun rot.

Ich hab da ein problem mit dem < und > anscheinend was ich wie folgt realisiert hatte

begin
if Startnummer.text <'200' then
begin
Listbox.font.color:= clblue;
end;
if startnummer.text >'199' and <'500' then
begin
Listbox.font.color:= clyellow
end;
end;

vllt könnte mir darauf mal eine ne kleinen schupser geben, weil ich eine probeversion bis montag fertig haben muss um zu schauen ob es soweit klappt beim vorstellen oder nicht.

Klaus01 13. Feb 2014 15:16

AW: Delphi, Erfassung von Daten per StringGrid
 
Hallo,

zu Problem 1:
Führe einen Zähler mit der bei einem Enter im Edit um eines hochgezählt wird.
Diesen Zähler kannst Du dann verwenden um die Spalte zu adressieren.

zu Problem 2:
Du solltest bedenken, dass bei jedem refresh der Text neu gezeichnet wird.
Er wird dann mit der zuletzt verwendeten Farbe gezeichnet.
Abhilfe den Text im onDraw entsprechen der Nummern/Zeilen eine Farbe zuweisen.

Grüße
Klaus

baumina 13. Feb 2014 15:19

AW: Delphi, Erfassung von Daten per StringGrid
 
Mein Vorschlag wäre folgender :

Delphi-Quellcode:
var
  StartNr : Integer;

begin
  try
    StartNr := StrToInt(trim(Startnummer.text)); // Leerstellen rausnehmen und in Zahl umwandeln
  except
    StartNr := 0;
  end;

  if Startnr < 200 then
  begin
    Listbox.font.color:= clblue;
  end;
  if ((StartNr > 199) and (StartNr < 500)) then // auf Klammern achten
  begin
    Listbox.font.color:= clyellow;
  end;
  if StartNr > 599 then
  begin
    Listbox.font.color:= clred;
  end;

Bummi 13. Feb 2014 15:27

AW: Delphi, Erfassung von Daten per StringGrid
 
der Vorschlag von Baumina tatsächlich zahlen zu verwenden ist sicher gut allerdings
wenn ich Deine Anforderungen lese:
Zitat:

nun ist es so das alle Zahlen von 0-199 Blau, 200-499 Gelb und alles über 500 rot gefärbt werden soll
sucht Du sicher etwas anderes als:
Listbox.font.color:= was die ganze Box umfärbt, eher in Richtung OnDrawItem ...
Um mehr zu helfen erscheint mir das ganze als zu unklar...

Vidar92 13. Feb 2014 16:15

AW: Delphi, Erfassung von Daten per StringGrid
 
Erstmal danke für die kleinen Hilfestellungen.

@ baumina
Egal wie und was ich dran drehe und ändere er färbt nur alles in der farbe, welche ich als erstes bei <200 nehme...
und wozu dient dieses trim? Das sehe ich ehrlich zum ersten mal.


@ Bummi
doch es ist erstmal genau das was ich suche, es hat nämlich einen gewissen sinn das diese farblich in der listbox sein müssen, da ich diese später auslese und diese dann auf ein extra formular alles was vorher mal eingelesen wurde in labels oder edit feldern ausgelesen werden soll. Die Farbe gibt nämlich die vorgesehene Strecke an und dies dient dann zur schnelleren ermittlung des siegers auf der einzelnen strecke


@ klaus
soweit hab ich es ja auch verstanden, nur ich schaff es nicht zu realisieren...



Naja wer noch was hat, kann es gerne posten, ich schaue mal ob ich ein Praxis Buch in der Zeit schaffe zu bekommen.

DeddyH 13. Feb 2014 16:26

AW: Delphi, Erfassung von Daten per StringGrid
 
Wie bummi schon sagt, ListBox.Font.Color setzt die Schriftfarbe für die komplette ListBox, deshalb ist das eben nicht das, was Du anscheinend suchst. Wie wäre es denn stattdessen mit so etwas: How to change the background color on different lines of text in a TListBox. Statt des Hintergrunds kann man natürlich auch die Schrift einfärben, das sind ja nur kleinere Anpassungen.

Klaus01 13. Feb 2014 19:15

AW: Delphi, Erfassung von Daten per StringGrid
 
Guten Abend,

kannst Du mal ein Screenshot von Deinem Programm anhängen?
Vielleicht sieht man ja dann welche Edits für welchen Zeilen/Spalten zuständig sind...

Grüße
Klaus

baumina 14. Feb 2014 06:20

AW: Delphi, Erfassung von Daten per StringGrid
 
Um einzelne Farben in einer StringGrid zu ändern, gehe ich folgendermaßen vor:

In der zugewiesenen Grid.OnDrawCell procedure:

Delphi-Quellcode:
Grid.Canvas.Brush.Color := clGreen; // optional : Hintergrundfarbe
Grid.Canvas.Font.Color := clRed; // optional : Schriftfarbe
Grid.Canvas.FillRect(Rect); // Zelle mit Hintergrundfarbe füllen
Rect.Left := Rect.Left + 2;
Rect.Right := Rect.Right - 2;
Rect.Top := Rect.Top + 2;
Rect.Bottom := Rect.Bottom - 2;
DrawText(Grid.Canvas.Handle, PChar(Grid.Cells[ACol,ARow]), StrLen(PChar(Grid.Cells[ACol,ARow])), Rect,DT_LEFT); // Text in Zelle schreiben
Zu deiner Frage "wozu dient dieses trim" : Wie ich schon oben geschrieben habe : "Leerstellen rausnehmen". Die genaue Beschreibung dazu findest du in der Delphihilfe oder hier System.SysUtils.Trim

Vidar92 22. Feb 2014 17:56

AW: Delphi, Erfassung von Daten per StringGrid
 
Hey, ich bins wieder^^

Also das mit der Farbe habe ich nun bissl anders geregelt in einer StringGrid aber passt soweit.


Mein Problem ist immernoch diese olle StringGrid^^

Ich schaffe es einfach nicht, das er bei jedem weiteren Eintrag eine Spalte tiefer schreibt und dann in die richtigen Zeilen (die Zeilen sind nciht das prob, ich schaffe es nicht in eine weitere Spalte automatisch eintragen zu lassen)



Nun ist ein weiteres Problem aufgetreten:
Anhand des Geburtsjahres wird die Altersklasse festgelegt (soweit klappt es), jedoch muss ich nun noch beachten das der 28.04.2014 der Stichtag für die altersklassen ist.

Nun habe ich es mit den Jahreszahlen wie folgt geregelt:

Zitat:

if (edit6.Text >='1975') and (edit6.Text <='1979') then
begin
StringGrid1.Cells[5,1]:='35-39 Jahre';
end;
usw und sofort.

Wie muss ich es nun verschachteln, damit er den 28.04.2014 als Stichtag nimmt? Edit4 steht für den Tag, Edit5 für Monat und Edit6 ist in dem Fall wie Ihr sehen könnt für's Jahr


Hoffe Ihr seht durch, wenn nicht muss ich es nachher neu formulieren wenn ich zurück bin.


Und danke nochmal für die bisherigen Hilfestellungen =)

Volker Z. 22. Feb 2014 21:53

AW: Delphi, Erfassung von Daten per StringGrid
 
Hallo,

Zitat:

Hoffe Ihr seht durch [...]
Na, eigentlich nicht wirklich.

Zitat:

Ich schaffe es einfach nicht, das er bei jedem weiteren Eintrag eine Spalte tiefer schreibt und dann in die richtigen Zeilen (die Zeilen sind nciht das prob, ich schaffe es nicht in eine weitere Spalte automatisch eintragen zu lassen)
Öhm, ich vermute mal - aber das ist reines Raten -, dass Du dem Stringgrid weitere Zeilen/Spalten hinzufügen möchtest; wenn dem so ist, dann macht man das über RowCount/ColCount - einfach den aktuellen Wert + 1.

Zitat:

Nun ist ein weiteres Problem aufgetreten:
Anhand des Geburtsjahres wird die Altersklasse festgelegt (soweit klappt es), jedoch muss ich nun noch beachten das der 28.04.2014 der Stichtag für die altersklassen ist.
Such mal in der OI nach (DateUtils) YearsBetween

Ein
Delphi-Quellcode:
ShowMessage (IntToStr (YearsBetween (EncodeDate (2014, 2, 28), EncodeDate (1975, 4, 1))))
gibt Dir hier 38 aus.

Damit könntest Du z. B. mit:
Delphi-Quellcode:
case YearsBetween (Date1, Date2) of
  30..34 : s := '30-34';
  35..39 : s := '35-39';
  40..44 : s := '40-44';
end;
StringGrid1.Cells [ACol, ARow] := s + ' Jahre'
die entsprechenden Inhalte füllen - wobei Date1 = Stichtag, Date2 = EncodeDate (mit den Daten aus den Eingabefeldern)

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr.

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