[gelöst]StringGrid.Selection

Für Fragen von Einsteigern und Programmieranfängern...

[gelöst]StringGrid.Selection

Beitragvon gladio » 27. Mär 2018, 19:06 [gelöst]StringGrid.Selection

Ich wollte in einem StringGrid einen Bereich per Code auswählen.
Dazu habe ich versucht
Code: Alles auswählen
StringGrid1.Selection := TGridRect(Rect(1,1,2,2));

Der Compiler bricht beim ersten Komma in Rect() ab
Code: Alles auswählen
planunit.pas(683,44) Fatal: Syntax error, ")" expected but "," found

Funktioniert das nicht im StringGrid?

Laz 1.8.2/32Bit auf Win10
Zuletzt geändert von gladio am 27. Mär 2018, 19:41, insgesamt 1-mal geändert.
gladio
 
Beiträge: 95
Registriert: 21. Jun 2014, 05:15
Wohnort: Insel Rügen
OS, Lazarus, FPC: Win7/10-32/64 - Laz 1.8 Standard-Edition | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon Mathias » 27. Mär 2018, 19:17 Re: StringGrid.Selection

Versuche mal folgendes:
Code: Alles auswählen
  StringGrid1.Selection := Rect(1, 1, 2, 2);
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3873
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 27. Mär 2018, 19:24 Re: StringGrid.Selection

Bei mir geht's. Du hast wahrscheinlich die Windows-Unit in der "uses"-Zeile, und zwar NACH Classes. Dann wird nämlich die Definition des Typen RECT (=TRect) in Windows statt der Funktion Rect() in Classes verwendet. Mein Tipp: Die Units Windows und Messages überhaupt nicht verwenden und durch LCLIntf, LCLType und LMessages ersetzen - damit ist das Programm höchstwahrscheinlich schon plattformunabhängig. Und wenn "uses Windows" wirklich sein muss, dann am Anfang der Unit-Liste
wp_xyz
 
Beiträge: 2485
Registriert: 8. Apr 2011, 08:01

Beitragvon gladio » 27. Mär 2018, 19:38 Re: StringGrid.Selection

Classes stand als erste in der Uses, wurde automatisch so angelegt. Mit Windows davor funktioniert es.
Habe auch Windows gelöscht und LCLIntf, LCLType eingesetzt: funktioniert auch.
Danke
gladio
 
Beiträge: 95
Registriert: 21. Jun 2014, 05:15
Wohnort: Insel Rügen
OS, Lazarus, FPC: Win7/10-32/64 - Laz 1.8 Standard-Edition | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon wp_xyz » 27. Mär 2018, 20:07 Re: [gelöst]StringGrid.Selection

Du kannst noch einen Schritt weiter gehen und versuchen, auch LCLIntf und LCLType wegzulassen. Das Windows kommt oft bei ehemaligen Delphi-Units rein, und Delphi schreibt das in die uses-Zeile jeder Unit.
wp_xyz
 
Beiträge: 2485
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 27. Mär 2018, 20:57 Re: [gelöst]StringGrid.Selection

Bei mir geht's. Du hast wahrscheinlich die Windows-Unit in der "uses"-Zeile, und zwar NACH Classes.

Stimmt, bei mir geht es auch mit TGridRect.
Macht es überhaupt Sinn mit TGridRect eine Typenumwandlung durchzuführen ?

An die Unit Windows habe ich gar nicht mehr gedacht, seit ich Linux verwende, brauche ich diese Unit auch nicht mehr.
Aber früher hat sie mir auch viel Ärger gemacht.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3873
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 27. Mär 2018, 21:14 Re: [gelöst]StringGrid.Selection

Mathias hat geschrieben:Macht es überhaupt Sinn mit TGridRect eine Typenumwandlung durchzuführen ?

Diese Umwandlung ist unnötig, da TGridRect nur ein Alias für TRect ist. Für den Fall dass es mal geändert wird, nützt dir die Typumwandlung allerdings auch nichts.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1934
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon gladio » 28. Mär 2018, 06:05 Re: [gelöst]StringGrid.Selection

Das Windows hatte wohl einen Sinn in der Uses-Klausel, ohne Windows oder LCLIntf und LCLType
fliegt mir dann das in OnDrawCell um die Ohren
Code: Alles auswählen
  if(aRow >=1) and (aCol >=2) then
    DrawText(StringGrid1.Canvas.Handle, PChar('|'), StrLen(PChar('|')), aRect, DT_CENTER);
 

Ist sicher auch optimierungswürdig.
gladio
 
Beiträge: 95
Registriert: 21. Jun 2014, 05:15
Wohnort: Insel Rügen
OS, Lazarus, FPC: Win7/10-32/64 - Laz 1.8 Standard-Edition | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon Mathias » 28. Mär 2018, 12:39 Re: [gelöst]StringGrid.Selection

Versuche mal
Code: Alles auswählen
StringGrid1.Canvas.TextOut(x, y, s)
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3873
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 28. Mär 2018, 15:10 Re: [gelöst]StringGrid.Selection

Das DT_CENTER oben heißt, dass der Text zentriert werden soll. Das geht mit dem TTextStyle des Canvas und TextRect (statt TextOut). Das ist alles in unit Graphics.
Code: Alles auswählen
var
  ts: TTextStyle;
begin
  ts := StringGrid1.Canvas.Textstyle;
  ts.Alignment := taCenter;  // horizontale zentrierung
  ts.Layout := tlCenter;  // vertikale Zentrierung
  StringGrid1.Canvas.TextRect(ARect, ARect.Left, ARect.Top, '|', ts);
end;
wp_xyz
 
Beiträge: 2485
Registriert: 8. Apr 2011, 08:01

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron
porpoises-institution
accuracy-worried