[gelöst]StringGrid.Selection

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

[gelöst]StringGrid.Selection

Beitrag von gladio »

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 Di 27. Mär 2018, 20:41, insgesamt 1-mal geändert.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: StringGrid.Selection

Beitrag von Mathias »

Versuche mal folgendes:

Code: Alles auswählen

  StringGrid1.Selection := Rect(1, 1, 2, 2);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: StringGrid.Selection

Beitrag von wp_xyz »

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

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: StringGrid.Selection

Beitrag von gladio »

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

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

Re: [gelöst]StringGrid.Selection

Beitrag von wp_xyz »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst]StringGrid.Selection

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: [gelöst]StringGrid.Selection

Beitrag von m.fuchs »

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

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: [gelöst]StringGrid.Selection

Beitrag von gladio »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst]StringGrid.Selection

Beitrag von Mathias »

Versuche mal

Code: Alles auswählen

StringGrid1.Canvas.TextOut(x, y, s)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: [gelöst]StringGrid.Selection

Beitrag von wp_xyz »

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;

Antworten