![]() |
StringGrid: eine Zeile markieren?
Hallo,
wie kann ich eine Zeile eines StringGrids markieren? [edit] Ich vergaß: die zeile soll nur durch eine Procedure (z. B. Aufruf durch ein MainMenu-Item) markiert werden. Durch einen Klick auf eine Zelle soll diese markiert sein. gesetzte Optionen:
[/edit] |
Re: StringGrid: eine Zeile markieren?
Hallo,
was soll markiert werden? Die Zeile mit der aktuell markierten Zelle:
Delphi-Quellcode:
Eine bestimmte Zeile (z.B. die 3te Zeile):
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
StringGrid1.Row, StringGrid1.ColCount-1, StringGrid1.Row));
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
2, StringGrid1.ColCount-1, 2)); |
Re: StringGrid: eine Zeile markieren?
Zitat:
Wenn ich deinen Code benutze, dann markiert er mir nur die schon markierte Zelle und die letzte Zeile. |
Re: StringGrid: eine Zeile markieren?
Hallo,
gerade nochmal getestet, es funktioniert einwandfrei :?
Delphi-Quellcode:
//Edit: sehe gerade bei Aufruf aus einem Menü gibt es Probleme
procedure TForm1.Button1Click(Sender: TObject);
begin StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols, //Left: Fixedcols nicht markiern StringGrid1.Row, //Top: aktuelle Zeile StringGrid1.ColCount-1, //Right: bis zur letzten Zelle StringGrid1.Row)); //Bottom: aktuelle Zeile end; |
Re: StringGrid: eine Zeile markieren?
Wahrscheinlich meint er sowas :
Delphi-Quellcode:
Klicke ich auf eine Zelle, so wird rechts und links davon alles blau und die ausgewählte sowie die letzte Zelle in der Zeile aber nicht.
procedure Tfrmsg.sgClick(Sender: TObject);
begin inherited; sg.Selection := TGridRect(Rect(sg.FixedCols, sg.Row, sg.ColCount-1, sg.Row)); end; Edit : wird am Grid nichts gemacht und das ganze wird von außerhalb z.B. einen ButtonClick ausgelöst, dann ists richtig ! |
Re: StringGrid: eine Zeile markieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich euren Code aus einem Button raus starte dann wird nichts markiert.
Wenn ich aber in das OnClick-Ereignis der StringGrid schreibe, dann passiert das was auf dem Bild zu sehen ist. [Edit] Ich muss noch hinzu sagen, dass ich OnDrawCell verwende. Wenn ich im OnDrawCell mal ein exit am Anfang schreibe (damit mein Code nicht durchlaufen wird) wird auch die ganze Zeile markiert (von einem Button aus) [/Edit] |
Re: StringGrid: eine Zeile markieren?
Hallo,
OnDrawCell :roll: was machst Du darin? Mit dem Code funktioniert es aus den verschiedenen Aufrufmöglichkeiten. Wobei nur beim Buttonklick alle Zellen markiert(blau) werden, bei Aufruf aus Menü oder im onClick des StringGrids ist die erste Zelle der Zeile nur mit einem Focusrahmen versehen.
Delphi-Quellcode:
Was besseres fällt mir jetzt nicht ein :gruebel:
var aRow,aFixCols : Integer;
begin aRow := StringGrid1.Row; aFixCols := StringGrid1.FixedCols; //erste Zelle markieren StringGrid1.Selection := TGridRect(Rect(aRow,aFixCols,aRow,aFixCols)); StringGrid1.SetFocus; //jetzt sozusagen eine Selectierung von hinten nach vorne StringGrid1.Selection := TGridRect(Rect(StringGrid1.ColCount-1, aRow, aFixCols, aRow)); |
Re: StringGrid: eine Zeile markieren?
Im OnDrawCell mach ich folgendes:
Delphi-Quellcode:
procedure TMainForm.StringGrid_AblaufDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); begin with (Sender as TStringGrid), Canvas do begin //linke, obere Zelle if (ACol = 0) and (ARow = 0) then begin Brush.Color := clWhite; end; //erste Zeile und erste Spalte neu zeichnen if (ACol = 0) or (ARow = 0) then begin //Textfarbe Blau Font.Color := clBlue; Font.Height := 16; Font.Style := [fsBold]; TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); FrameRect(Rect); end else begin //Hintergrundfarbe Weiss Brush.Color := clwhite; //Textfarbe Schwarz Font.Color := clBlack; Font.Height := 12; Font.Style := [fsBold]; TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); FrameRect(Rect); end; // If (ARow > 0) and (ACol > 1) and (ACol < 11) then If Cells[ACol, ARow] <> '' then begin case Cells[ACol, ARow][1] of '1': begin //Hintergrund-Farbe "rot" bei Relais einschalten Canvas.Brush.Color := clRed; end; '0': begin //Hintergrund-Farbe "rot" bei Relais einschalten Canvas.Brush.Color := clLime; end; '?': begin //Hintergrund-Farbe "rot" bei Relais einschalten Canvas.Brush.Color := clYellow; end; else //Hintergrund-Farbe "weiss" Canvas.Brush.Color := clWhite; end; TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); FrameRect(Rect); end; end; end; |
Re: StringGrid: eine Zeile markieren?
Hallo,
in Deiner OnDrawCell-Behandlungs-Routine werden selectierte Zellen wie normale gezeichnet. Füge mal die markierte Zeile in die Prozedur ein, dann klappt erst mal die Selectierung.
Delphi-Quellcode:
Dann die Procedur zu OnDrawCell erweitern
//...
begin with (Sender as TStringGrid), Canvas do if not (gdSelected in State) then//<----------- !!! begin //... und selectierte Zellen entsprechnend Deinen Wünschen zeichnen. |
Re: StringGrid: eine Zeile markieren?
Zitat:
Ich hab jetzt folgendes gemacht:
Delphi-Quellcode:
Jetzt kann ich nur noch hoffen, dass die Markierungsfarbe immer clBlue ist :wink:
begin
with (Sender as TStringGrid), Canvas do if not (gdSelected in State) then begin { ... } end else begin //NEUER PART Canvas.Brush.Color := clBlue; TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); FrameRect(Rect); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr. |
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