AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid: eine Zeile markieren?

Ein Thema von Helmi · begonnen am 2. Jan 2006 · letzter Beitrag vom 2. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 20:05
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:
  • goEditing
  • die Standard-gesetzen Optionen

[/edit]
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#2

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 20:33
Hallo,

was soll markiert werden?
Die Zeile mit der aktuell markierten Zelle:
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        StringGrid1.Row,
                                        StringGrid1.ColCount-1,
                                        StringGrid1.Row));
Eine bestimmte Zeile (z.B. die 3te Zeile):
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        2,
                                        StringGrid1.ColCount-1,
                                        2));
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 21:07
Zitat von Lannes:
Hallo,

was soll markiert werden?
Die Zeile mit der aktuell markierten Zelle:
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        StringGrid1.Row,
                                        StringGrid1.ColCount-1,
                                        StringGrid1.Row));
Eine bestimmte Zeile (z.B. die 3te Zeile):
Delphi-Quellcode:
StringGrid1.Selection := TGridRect(Rect(StringGrid1.FixedCols,
                                        2,
                                        StringGrid1.ColCount-1,
                                        2));
Ich will die Zeile der aktuell markierten Zelle makieren.
Wenn ich deinen Code benutze, dann markiert er mir nur die schon markierte Zelle und die letzte Zeile.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 21:19
Hallo,

gerade nochmal getestet,
es funktioniert einwandfrei
Delphi-Quellcode:
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;
//Edit: sehe gerade bei Aufruf aus einem Menü gibt es Probleme
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 21:29
Wahrscheinlich meint er sowas :

Delphi-Quellcode:
procedure Tfrmsg.sgClick(Sender: TObject);
begin
  inherited;
  sg.Selection := TGridRect(Rect(sg.FixedCols,
                                 sg.Row,
                                 sg.ColCount-1,
                                 sg.Row));
end;
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.

Edit : wird am Grid nichts gemacht und das ganze wird von außerhalb z.B. einen ButtonClick ausgelöst, dann ists richtig !
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#6

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 21:37
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]
Miniaturansicht angehängter Grafiken
stringgrid_208.jpg  
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#7

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 22:00
Hallo,

OnDrawCell
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:
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));
Was besseres fällt mir jetzt nicht ein
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#8

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 22:07
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;
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#9

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 22:21
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:
//...
begin
  with (Sender as TStringGrid), Canvas do
    if not (gdSelected in State) then//<----------- !!!
    begin
    //...
Dann die Procedur zu OnDrawCell erweitern
und selectierte Zellen entsprechnend Deinen Wünschen zeichnen.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#10

Re: StringGrid: eine Zeile markieren?

  Alt 2. Jan 2006, 22:31
Zitat von Lannes:
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:
//...
begin
  with (Sender as TStringGrid), Canvas do
    if not (gdSelected in State) then//<----------- !!!
    begin
    //...
Dann die Procedur zu OnDrawCell erweitern
und selectierte Zellen entsprechnend Deinen Wünschen zeichnen.
Danke für deinen Tip.

Ich hab jetzt folgendes gemacht:
Delphi-Quellcode:
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;
Jetzt kann ich nur noch hoffen, dass die Markierungsfarbe immer clBlue ist
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz