Delphi-PRAXiS
Seite 2 von 3     12 3      

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 In StringGrid-Zeilen mit einem Balken navigieren (https://www.delphipraxis.net/77770-stringgrid-zeilen-mit-einem-balken-navigieren.html)

marabu 24. Sep 2006 19:43

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Die vermeintlichen Änderungen sind bei mir so von D7 vorgegeben - du musst natürlich die von D3 vergebene Signatur benutzen. Ich wollte nur zeigen, wie die Bedingung formuliert werden muss um den von dir gewünschten gelben Balken zu erhalten. Bei D3 scheint der Header wegen der Überdeckung der Eigenschaften Col und Row mit den gleichnamigen Parametern noch nicht korrigiert worden zu sein. Du kannst die aktuellen Werte zwischenspeichern:

Delphi-Quellcode:
procedure TFRechn.StringGridRedatDrawCell(Sender: TObject;
  Col, Row: Integer; Rect: TRect; State: TGridDrawState);
var
  aCol, aRow: Integer;
begin
  aCol := Col;
  aRow := Row;
  with Sender As TStringGrid do
  begin
    if (ARow = Row) and (ACol >= FixedCols)
      then Canvas.Brush.Color := clYellow
      else Canvas.Brusch.Color := clWhite;
    Canvas.FillRect(Rect);
  end;
end;
Immernoch beschleicht mich das Gefühl, dass du Spalten und Zeilen verwechselst. Du schreibst 8 feste Titelspalten und jede weitere Zeile...

marabu

LOMBI 25. Sep 2006 19:51

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Guten Abend marabu,

Deinen Code habe ich umgesetzt. Im StringGrid ist ein gelber
Balken vorhanden, der auf Click in eine andere Zeile wechselt.

Was ich jetzt vermisse, ist meine feste Titelleiste oben mit den Bezeichnungen der Spalten.

FixedColor := clRed;
Font.Color := clBlack;

Delphi-Quellcode:
procedure TFRechn.FormCreate(Sender: TObject);
begin
  with StringGridRedat do
    begin
      ColCount := 8;   /Bezeichnung der Spalten
      RowCount := 1;  
      Cells [0,0] := 'PosNr';
      Cells [1,0] := 'Art-Nr';
      Cells [2,0] := 'Bezeichnung';
      ...
      Cells [7,0] := 'Gesamtpreis';
  end;
Wie kommt bitte die Titelleiste mit den Bezeichnungen
ins StringGrid? Ebenso kann ich dem StringGrid keine
Artikeldaten hinzufügen. Die neuen Zeilen bleiben alle leer!

Gute Nacht!

marabu 26. Sep 2006 18:51

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Hallo Lombi,

in Beitrag #4 hast du angegeben, dass du die Eigenschaft FixedRows auf null gesetzt hast. Diese Eigenschaft muss auf eins gesetzt werden, damit eine Titelzeile sichtbar ist. Eine Nebenbedingung ist, dass RowCount größer als FixedRows sein muss, sonst funktioniert das nicht. Was das Hinzufügen von Datenzeilen angeht musst du mal deinen aktuellen nicht funktionierenden Code zeigen.

Grüße vom marabu

LOMBI 27. Sep 2006 10:38

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Hallo marabu,

bitte schau Dir mal die Demo an. Mit OnDrawCell werden meine Spalten-
bezeichnungen nicht angezeigt.

Gruß
Lombi

marabu 27. Sep 2006 19:30

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Hallo Lombi,

du schreibst ja auch gar keinen Text raus. Hinter FillRect() gehört noch diese Zeile:

Delphi-Quellcode:
 Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
Durch FillRect() hast du die bereits ausgegebenen Texte wieder überpinselt. Deshalb nochmal mit TextRect() oder TextOut() ausgeben.

Grüße vom marabu

LOMBI 28. Sep 2006 16:05

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Hallo marabu!

zwei Kleinigkeiten fehlen noch in meinem StringGrid:

1.) RowCount := 2; FixedRows := 1; für die Titelzeile
Beim Ausführen des Prog ist die Titelzeile und schon eine weitere
Zeile vorhanden (RowCount:= 2), d.h. die Eingabe der ersten Artikel-
position (über Edits) beginnt nicht unmittelbar unter der Titelzeile.

2.) Wie bitte bekomme ich FixedColor := clInfoBk; in die Titelzeile?

Viele Grüße
Lombi

marabu 28. Sep 2006 20:45

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Hallo Lombi,

dein zweites Problem ist am einfachsten zu lösen:

Delphi-Quellcode:
procedure TDemoForm.StringGridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  with Sender as TStringGrid do
  begin
    if (ARow < FixedRows) or (ACol < FixedCols) then
      Canvas.Brush.Color := clInfoBk else
      // ...
  end;
end;
Bei deinem ersten Problem hilft nur ein eigenes book keeping. Du musst um die Optik zu erhalten einen eigenen RowCount pflegen und den RowCount des Grid nie unter 2 fallen lassen. Beim Löschen der letzten Zeile musst du dann die Cells von Row[1] alle leeren und beim Hinzufügen der ersten Zeile schreibst du deine Werte einfach in die bereits existierende Row[1].

Gute Nacht

marabu

LOMBI 5. Okt 2006 16:09

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Verzweifelt suche ich noch nach einer Lösung für das eigene book keeping.

Die Procedure löscht die 1.Zeile im StringGrid, nimmt aber auch die Titel-
zeile weg.

Delphi-Quellcode:
procedure DeleteFirstRow(const: Grid : TStringGrid; RowNumber : Integer);
var
  i: Integer;
begin
  for i := RowNumber to Grid.RowCount -2 do
  Grid.Rows[i].Assign(Grid.Rows [i -1]);
  Grid.Rows [Grid.RowCount -1].Clear;
  Grid.RowCount := Grid.RowCount-1;
end;

procedure TFRechn.BtnNeuClick(Sender: TObject);
...
DeleteFirstRow(StringGridRedat, 1);
...
Gruß
Lombi

marabu 5. Okt 2006 18:27

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Lombi,

nicht verzweifeln. Ich habe dir eine Demo angehängt, die dir mit möglichst wenig Code das Prinzip zeigt. Hoffentlich kannst du sie unter D3 übersetzen.

Grüße vom marabu

LOMBI 25. Okt 2006 18:19

Re: In StringGrid-Zeilen mit einem Balken navigieren
 
@marabu

Herzlichen Dank für Deine Demo.

Delphi-Quellcode:
procedure TFormKundenListe.BtnKundeNeuClick(Sender: TObject);
var
  s: TStrings;
  iCol: Integer;
begin
  with FormKunden, QueryKunden, GridKunden do
    begin
      FormKunden.ShowModal;
      Append;
      FieldByName('Name1').AsString := EditName1.Text;
      ...
      if LineCount > 0 then  
        begin
          iCol := Col;
          InsertRow(GridKunden, icol);
          Row := Pred(Row);
        end;
          ***********************************************
          for iCol := FixedCols to Pred(ColCount) do
          Cells[iCol, Row] := IntToStr(Random(90) + 10);
          SetFocus;
         ************************************************ 
       end;
         LineCount := LineCount + 1;
       end;
Durch was muß ich bitte die markierte Stelle im Code ersetzen, um meine Kundendaten ins Grid zu bekommen?

Beste Grüße
Lombi


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.
Seite 2 von 3     12 3      

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