Autor Beitrag
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: So 24.08.03 13:40 
Hi Leute.

Ich habe gerade an meinem Programm einige Veränderungen vorgenommen, damit u.a. die tristen Farben weg sind. Nun hat mein Programm als Farbe ein leichtes blau; das tut aber nichts zur Sache.

Wie dem auch sei, die StringGrids sind ebenfalls blau und einige haben die Eigenschaft "goEditing" auf True. Wenn ich in diesen Grids dann in eine Zelle klicke um den Wert einzutragen, wird diese jedoch weiss und das gefällt mir absolut nicht. Wie kann ich es ändern, daß bei Eintragung eines Wertes in ein solches Grid die jeweilige Zelle auch blau bleibt?

Im Forum bin ich irgendwie nicht sonderlich weit gekommen und EDH bietet mir da auch nichts wirklich brauchbares; aber vielleicht ja eine(r/s) von euch. ;-)

_________________
Hasta La Victoria Siempre


Zuletzt bearbeitet von Terra23 am Do 28.08.03 17:52, insgesamt 4-mal bearbeitet
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 24.08.03 14:00 
Du musst OnCellDraw irgendwie überschreiben und dort dann die Farbe vom Brush ändern, so in etwa. Schau vll. gleich mal nach :wink:
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Do 28.08.03 14:29 
Das klappt bei mir nicht. Wahrscheinlich habe ich zu wenig Ahnung davon.. :-(

_________________
Hasta La Victoria Siempre
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Do 28.08.03 14:50 
Hi,

schau mal
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
// Man muss im OnDrawCell die selektierte Zelle selber zeichnen. 
// You have to handle the OnDrawCell event and draw the selected cell yourself. 

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
  Rect: TRect; State: TGridDrawState); 
const 
  SelectedColor = Clblue; 
begin 
  if (state = [gdSelected]) then 
    with TStringGrid(Sender), Canvas do 
    begin 
      Brush.Color := SelectedColor; 
      FillRect(Rect); 
      TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]); 
    end
end;

und noch
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
  Rect: TRect; State: TGridDrawState); 
var 
  dx: Integer; 
begin 
  with (Sender as TStringGrid) do 
  begin 
    // Don't change color for first Column, first row 
    if (ACol = 0or (ARow = 0then 
      Canvas.Brush.Color := clBtnFace 
    else 
    begin 
      case ACol of 
        1: Canvas.Font.Color := clBlack; 
        2: Canvas.Font.Color := clBlue; 
      end
      // Draw the Band 
      if ARow mod 2 = 0 then 
        Canvas.Brush.Color := $00E1FFF9 
      else 
        Canvas.Brush.Color := $00FFEBDF
      Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); 
      Canvas.FrameRect(Rect); 
    end
  end
end;


MFG

- Ernesto -


Zuletzt bearbeitet von ErnestoChe am Do 28.08.03 15:22, insgesamt 1-mal bearbeitet
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Do 28.08.03 15:16 
Hey, vielen Dank Ernesto. Genau das, was ich gesucht habe. :-)

Viva La Revolution... ;-)

_________________
Hasta La Victoria Siempre
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Do 28.08.03 16:59 
... sorry für die vorschnelle Reaktion meinerseits. Gibt es irgendwo eine Liste mit den States?

Ich meine, gdSelected ist ja markiert (für diesen Zweck funktioniert es auch so wie es soll) doch nun bräuchte ich noch den State für "geklickt", sprich wenn man doppelt in eine Zelle klickt, damit die nicht weiß bleibt...


///Edit -> Schon gut. Hab's in der Hilfe gefunden. :oops: Nichts für Ungut.

_________________
Hasta La Victoria Siempre
kasi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 37

Win XP
D5 Ent
BeitragVerfasst: Do 28.08.03 18:08 
Das wird so einfach nicht funktionieren, da beim editieren ein Editor vom Typ TInplaceEdit erzeugt, welcher von TCustomMaskEdit abgeleitet ist. An diesen kommst du aber so ohne weiteres nicht ran. Du mußt eine Componente von TStringGrid ableiten und die Methode CreateEditor überschreiben.

z.B.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  TMyStringGrid = class(TStringGrid)
    private
    protected
      function CreateEditor: TInplaceEdit; override

    public
    end;

....

function TMyStringGrid.CreateEditor: TInplaceEdit;
begin
 Result := inherited CreateEditor;
 TEdit(Result).Color := clRed;
end;

Einsatzbeispiel
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
   private
     MyStringGrid : TMyStringGrid;

....

procedure TForm1.FormCreate(Sender: TObject);
begin
MyStringGrid := TMyStringGrid.Create(Self);
MyStringGrid.Left := 488;
MyStringGrid.Top := 560;
MyStringGrid.Parent := Self;
MyStringGrid.OnDrawCell := StringGrid1DrawCell;
MyStringGrid.Options := MyStringGrid.Options + [goEditing];
end;


KASI
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Do 28.08.03 20:43 
Danke. Ggf. werde ich das mal probieren. Ich habe mich jetzt erstmal anders bemüht und einen ganz anderen Weg genommen als über das Färben. :-)

_________________
Hasta La Victoria Siempre