Stringgrid sortieren

Für Fragen von Einsteigern und Programmieranfängern...
wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Stringgrid sortieren

Beitrag von wp_xyz »

Winni hat geschrieben:
Mi 19. Jan 2022, 22:25
Aber die Lokalisierung der Fortmatsettings ist einer der größten Mist-Bolzen, die Delphi je eingeführt hat.
Ist lange her, aber in der Schule hat man mir beigebracht, dass das Ergebnis der Division von 1 durch 2 die Zahl Null-Komma-Fünf ist, und nicht Null-Punkt-Fünf. Das war, als es noch lange kein Delphi gab. Diesmal ist Delphi unschuldig.

Aber egal. Ich will dich nicht bekehren. Ich will nur, dass keine Halbwahrheiten verbreitet werden.
Winni hat geschrieben:
Mi 19. Jan 2022, 22:25
DefaultFormatSettings : TFormatSettings = (
...
DecimalSeparator: '.';
...

Also geht das mit dem Punkt als DecimalSeparator höchst offiziell seinen korrekten Gang
Wie man's nimmt. Ein "FormatDateTime('mmmm', now)" zeigt dir auf deinem deutschen Linux an, dass wir zur Zeit den Monat "January" haben. Wenn du aber die Unit clocale einbindest, bekommst du den Januar und das Dezimalkomma.
Zuletzt geändert von wp_xyz am Mi 19. Jan 2022, 23:39, insgesamt 1-mal geändert.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Stringgrid sortieren

Beitrag von Winni »

Hi!

Wer will denn Buchstaben im Datum haben????

Das ist auch so eine anglo-amerikanische Unsitte, die keiner braucht.

Winni

Adenos
Beiträge: 67
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Stringgrid sortieren

Beitrag von Adenos »

die Werte in der Spalte werden vom Programm errechnet. Deshalb kann ich die letzten Bearbeitungsschritte (das Hinzufügen der Währungszeichen und der Tausendertrennzeichen) einfach weglassen. Ich habe jetzt Integerzahlen in der Spalte stehen, schaffe es aber trotzdem nicht, die Spalte richtig zu sortieren. Weil es sich um die fünfte Spalte handelt, schreibe ich

Code: Alles auswählen

 
 procedure TForm1.Button1Click(Sender: TObject);
begin
  StringGridDepot.SortColRow(true,5);
end; 
Aber das bewirkt nichts.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Stringgrid sortieren

Beitrag von theo »

Adenos hat geschrieben:
Do 20. Jan 2022, 05:07
Ich habe jetzt Integerzahlen in der Spalte stehen, schaffe es aber trotzdem nicht, die Spalte richtig zu sortieren.
Hast du jetzt auf ganzzahlige Werte gerundet? Integer sind Ganzzahlen ohne Nachkommastellen.
Wie sieht denn jetzt dein Code für OnCompareCells aus?

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Stringgrid sortieren

Beitrag von six1 »

Ich habs nicht genau im Kopf, aber die "fünfte Spalte" sollte nicht StringGridDepot.SortColRow(true,5); sondern eher StringGridDepot.SortColRow(true,4); sein
Gruß, Michael

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Stringgrid sortieren

Beitrag von theo »

six1 hat geschrieben:
Do 20. Jan 2022, 08:32
Ich habs nicht genau im Kopf, aber die "fünfte Spalte" sollte nicht StringGridDepot.SortColRow(true,5); sondern eher StringGridDepot.SortColRow(true,4); sein
Standardmässig ist die erste Spalte eine "FixedCol", dann könnte es schon so stimmen, wenn man die nicht mitzählt.
Aber wir sind ja nicht im Kindergarten, das wird Adenos schon selber wissen. :wink:

Adenos
Beiträge: 67
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Stringgrid sortieren

Beitrag von Adenos »

mir ist immer noch nicht klar, um welche Spalte es sich handelt. Ich möchte die Spalte "Wert" sortieren:
Bild
ich habe den von Winni oben angegebenen Code bei CompareCells eingegeben:

Code: Alles auswählen

 
procedure TForm1.StringGridDepotCompareCells(Sender: TObject; ACol, ARow, BCol,
  BRow: Integer; var Result: integer);
begin
  result := StrToIntDef(StringGridDepot.Cells[ACol,ARow],0);
  if StringGridDepot.SortOrder = soAscending then  
    result := -result;
end;
die Sortierreihenfolge rufe ich so auf:

Code: Alles auswählen

 
StringGridDepot.SortColRow(true,4); 
wenn ich hier eine 5 eintrage, passiert nichts, wenn ich eine 4 eintrage, werden die Reihen umsortiert, aber wie man auf dem Bild oben sieht nicht in der gewünschten Reihenfolge. Was könnte denn jetzt noch verkehrt sein?

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Stringgrid sortieren

Beitrag von six1 »

Du kannst dir doch einfach mal die Werte anschauen...

begin
showmessage(StringGridDepot.Cells[ACol,ARow]);
...

dann weißt du, wo die Daten her kommen...
Gruß, Michael

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Stringgrid sortieren

Beitrag von theo »

@Adenos: Du musst die beiden Zellen vergleichen und im Result mitteilen, welche grösser/kleiner ist.
Also musst du in StringGridDepotCompareCells auch die Zelle BCol, BRow berücksichtigen und mit Zelle ACol, ARow vergleichen.

So müsste aber reichen:

Code: Alles auswählen

  Result:=StrToIntDef(StringGridDepot.Cells[ACol, ARow], 0) - StrToIntDef(StringGridDepot.Cells[BCol, BRow], 0);
 if StringGridDepot.SortOrder = soAscending then  
    Result := -Result;

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Stringgrid sortieren

Beitrag von wp_xyz »

Adenos hat geschrieben:
Do 20. Jan 2022, 15:12
mir ist immer noch nicht klar, um welche Spalte es sich handelt. Ich möchte die Spalte "Wert" sortieren:
Bild
Die Indizierung beginnt bei 0. Das heißt, die Spalte "Wert" hat den Index 5.

P.S.
Es wäre besser, wenn du keine externen Bilder verlinken würdest, denn diese verschwinden irgendwann vom Server, und dann ist dein Beitrag nicht mehr verständlich. Lade einfach das Bild via "Dateianhänge" direkt ins Forum hoch. Genauso kannst du Programmcode hochladen (wobei die einzelnen Dateien am besten in ein zip, 7z o.ä. Archiv gepackt werden sollten).

Adenos
Beiträge: 67
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Stringgrid sortieren

Beitrag von Adenos »

ok, jetzt funktioniert es. Tut mir leid, dass ich mich ein bisschen doof anstelle.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Stringgrid sortieren

Beitrag von wp_xyz »

Adenos hat geschrieben:
Do 20. Jan 2022, 16:56
Tut mir leid, dass ich mich ein bisschen doof anstelle.
Nein, nein. Das kennt jeder von uns.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Stringgrid sortieren

Beitrag von Winni »

Hi!


Wir haben alle mal angefangen mit Pascal zu "kämpfen" ....

Faustformeln

* Es wird fast immer angefangen, bei Null zu zählen
* Ausnahme: Strings werden ab Eins gezählt.

Erstere führt bei Anfängern zu der verwirrenden Situation, dass der Berech von Null bis Drei aber vier Elemente besitzt.

Tipp: Die Untergrenze kann man mit Low() erfahen und die Obergrenze mit high().

Das klappt auch, falls die Untergrenze mal NICHT Null ist, weil man aus praktischen Erwägungen sich etwas selbst definiert hat .

Code: Alles auswählen

Type DiesJahrhundert = 2001..2100;

dann kann man coden:

Code: Alles auswählen

var  Jahr : DiesJahrhundert;
....
for Jahr := low(DiesJahrhundert) to high(DiesJahrhundert) do
        writeln (Jahr);
...


Probieren und Fragen! Das hilft weiter.

Winni

Antworten