Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ein paar Fragen zum StringGrid (https://www.delphipraxis.net/99370-ein-paar-fragen-zum-stringgrid.html)

ascotlx 11. Sep 2007 09:17


ein paar Fragen zum StringGrid
 
Liste der Anhänge anzeigen (Anzahl: 2)
Moin moin DP'ler,

ich habe da ein kleines Programm geschrieben, welches Dateien auf ihr "Vorhandensein" prüft.
Nun sollen die Dateien angezeigt werden und der Output über Labels sah doch sehr dürftig aus.
Kurz darauf stolperte ich hier über den Hinweis auf Stringrids.

Ich suchte die halbe Nacht und rausgekommen ist das Programm welches ihr im Anhang findet.

Nun zu meinen Fragen:

1. Das grau markierte Feld (siehe Screenshot) stört mich. Da "nur" die Informationen dargestellt
werden sollen, will ich keinen Focus auf das Stringgrid. Wie kann ich diese Markierung aufheben?

2. Wenn eine Datei nich vorhanden ist, soll die ganze Zeile rot markiert werden. Bis jetzt habe ich nur eine
Zelle rot "tünchen" können. Kann mir jemand eine Hilfestellung geben oder mir erklären was ich tun muss??

Wie gesagt, ich habe diverse Code Schnipsel gefunden und zusammengestrickt. Alleine hätte ich das nie hinbekommen.

Optimierungsvorschläge werden gerne gelesen und verwertet.

cu && vielen Dank schonmal ...

ascotlx

P.S.: das Archiv erstellt einen Ordner dp in dem das Projekt abgespeichert ist.

s-off 11. Sep 2007 11:01

Re: ein paar Fragen zum StringGrid
 
Hallo,

zu 1:
Delphi-Quellcode:
Procedure TForm1.FormCreate(Sender: TObject);
var
   TheRect: TGridRect;
Begin
   [...]

   StringGrid1.Selection := TheRect;
End;
zu 2:
lässt sich bestimmt auch eleganter lösen, funktioniert aber:
Delphi-Quellcode:
Procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
   Rect: TRect; State: TGridDrawState);

 [...]
Begin

   With (Sender As TStringGrid) Do Begin
      If (Pos('nicht', StringGrid1.Cells[ACol - 1, ARow]) = 1) Or
         (Pos('nicht', StringGrid1.Cells[ACol, ARow]) = 1) Or
         (Pos('nicht', StringGrid1.Cells[ACol + 1, ARow]) = 1) Then Begin
         Canvas.Brush.Color := clRed;
         Canvas.FillRect(Rect);
         Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, StringGrid1.Cells[ACol, ARow]);
      End;
   End;

 [...]

End; // OnDrawCell

defede 11. Sep 2007 11:08

Re: ein paar Fragen zum StringGrid
 
Hi,

du könntest mit RowSelect arbeiten.
Hat aber den Nachteil das das eben Blau einfärbt.
Amsonsten musst eben Rekuriv malen. (für die Zeile)

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  //Funkt bei RowSelect
  if(ARow = StringGrid1.Row)then begin
    //Amsonsten noch ACol Prüfen!
    StringGrid1.Canvas.Brush.Color := clRed;
    StringGrid1.Canvas.FillRect(Rect);
  end;
end;
hoffe das hilft *g*

ascotlx 11. Sep 2007 11:19

Re: ein paar Fragen zum StringGrid
 
hey super s-off,
... und alles funktioniert ... :thumb:

woher weiss man denn sowas ??
Delphi-Quellcode:
   StringGrid1.Selection := TheRect;
bedeutet das, dass die Selection auf die "Gruppe von Zellen" gesetzt wird und nicht
auf die erste Zelle ??

Besten Dank

ascotlx

s-off 11. Sep 2007 11:45

Re: ein paar Fragen zum StringGrid
 
Zitat:

Zitat von ascotlx
woher weiss man denn sowas ??
Delphi-Quellcode:
   StringGrid1.Selection := TheRect;
bedeutet das, dass die Selection auf die "Gruppe von Zellen" gesetzt wird und nicht
auf die erste Zelle ??
ascotlx

Nein, das bedeutet, dass die Selektion entsprechend der Initialwerte des GridRects gesetzt wird, welche ausserhalb des (in diesem Fall) sichtbaren Bereichs liegen.

Korrekterweise würde man die Initialwerte mit 0 überschreiben, und erst dann die Selektion setzen.
Delphi-Quellcode:
  TheRect.Left := 0;
  TheRect.Right := 0;
  TheRect.Top := 0;
  TheRect.Bottom := 0;
  StringGrid1.Selection := TheRect;

Matze 11. Sep 2007 11:49

Re: ein paar Fragen zum StringGrid
 
Wenn ich das richtig sehe, wäre für dein Vorhaben ein TListView besser geeignet. Dann könntest du beispielsweise sehr einfach zusätzlich das Icon, das mit der Dateiendung verknüpft ist, mit anzeigen. Dies könnte übersichtlicher wirken, zumindest würde mir das besser gefallen.

Anmerkung: TListView ist im Endeffekt das, worin im Windows Explorer auf der rechten Seite die Dateien aufgelistet werden. Das in der Detailansicht wäre für dich geeignet.

DP-Maintenance 11. Sep 2007 11:53

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Sonstige Fragen zu Delphi" nach "VCL / WinForms / Controls" verschoben.

ascotlx 11. Sep 2007 15:33

Re: ein paar Fragen zum StringGrid
 
@Matze ...
mhhhhh, danke für den Hinweis. Da ich bis jetzt auch mit dieser Variante keinerlei Erfahungen
sammeln konnte, schau ich mal was ich so finden kann.

Aber bis dahin, habe ich noch eine Frage zu obigem Thema StringGrid:

Wie kann ich nur in einer Zeile den Schrifttyp fsBold zuweisen ??
Wenn ich das hier mache, gilt es für das ganze StringGrid

Delphi-Quellcode:
StringGrid1.Font.Style:=[fsBold];
Besten Dank

ascotlx

s-off 11. Sep 2007 15:46

Re: ein paar Fragen zum StringGrid
 
Zitat:

Zitat von ascotlx
Wie kann ich nur in einer Zeile den Schrifttyp fsBold zuweisen ??

Indem Du nur für die ACol, die sich in ARow=x befinden, im DrawCell-Event die Schriftart setzt.

ascotlx 11. Sep 2007 15:54

Re: ein paar Fragen zum StringGrid
 
moin s-off,

nett ... und womit oder wie mache ich das ???

Meinen Fehlversuch hast Du ja schon gesehen. Ich finde leider nichts an Doku, sonst würde ich
nicht so nerven.

:gruebel:

ascotlx

EDIT EDIT EDIT EDIT

Delphi-Quellcode:
Canvas.Font.Style:=[fsBold];
s-off ... besten Dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr.
Seite 1 von 2  1 2      

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