AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi, Erfassung von Daten per StringGrid

Ein Thema von Vidar92 · begonnen am 13. Feb 2014 · letzter Beitrag vom 22. Feb 2014
Antwort Antwort
Vidar92

Registriert seit: 18. Okt 2012
7 Beiträge
 
#1

Delphi, Erfassung von Daten per StringGrid

  Alt 13. Feb 2014, 15:00
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.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.287 Beiträge
 
Delphi XE7 Professional
 
#2

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 13. Feb 2014, 15:16
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 13. Feb 2014, 15:19
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;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 13. Feb 2014, 15:27
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...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Vidar92

Registriert seit: 18. Okt 2012
7 Beiträge
 
#5

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 13. Feb 2014, 16:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.802 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 13. Feb 2014, 16:26
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.287 Beiträge
 
Delphi XE7 Professional
 
#7

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 13. Feb 2014, 19:15
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 14. Feb 2014, 06:20
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
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Vidar92

Registriert seit: 18. Okt 2012
7 Beiträge
 
#9

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 22. Feb 2014, 17:56
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 =)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#10

AW: Delphi, Erfassung von Daten per StringGrid

  Alt 22. Feb 2014, 21:53
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 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ß
Volker Zeller
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:37 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