AGB  ·  Datenschutz  ·  Impressum  







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

StringGrid Zelle bei ButtonKlick färben?

Offene Frage von "DFischer"
Ein Thema von DFischer · begonnen am 22. Mai 2007 · letzter Beitrag vom 22. Mai 2007
Antwort Antwort
DFischer

Registriert seit: 16. Mai 2007
Ort: Bingen am Rhein
2 Beiträge
 
#1

StringGrid Zelle bei ButtonKlick färben?

  Alt 22. Mai 2007, 11:42
Hallo zusammen!

Zuerstmal...Ja, ich habe die Suchfunktion benutzt und ja, ich habe schon alle möglichen Variationen der gegebenen Informationen ausprobiert, doch leider hat nichts davon geholfen

Ich muss in der Firma ein kleines Programm schreiben, das soweit auch läuft. Nur gibt es ein Problem beim Einfärben von Zellen nach dem Klicken auf bestimmte Buttons.

Das StringGrid ist mit einer Tabelle verknüpft, die wiederum mit einer Datenbank. Beim Einloggen werden im StringGrid Benutzername, Telefonnummer sowie der Status angezeigt (da hab ich auch noch ein Problem, dazu aber ein anderes mal).
Nun soll, beim Klick auf den Button "Anwesend" die Zelle des Status, oder wenn möglich die ganze Zeile, grün eingefärbt werden.

Es ist doch möglich per Suche die Zeile herauszufinden, in der der aktuell eingeloggte Benutzer steht, und diese dann grün einzufärben, oder?

Habe leider recht wenig Ahnung von Delphi, und mein Schulwissen von vor 4 Jahren bringt mich leider auch nicht wirklich weiter.
Warum mein Chef mich das Programm dennnoch programmieren lässt weiss ich nicht genau

Ich hoffe dass Ihr mir bei diesem und vielleicht folgenden Problemen helfen könnt, wäre super nett von euch!

Grüße
Dominik Fischer
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: StringGrid Zelle bei ButtonKlick färben?

  Alt 22. Mai 2007, 12:04
moin,
du müsstest in der Zelle irgendwie hinterlegen, ob und ggf. wie diese gefärbt werden soll (hintergrundklasse (TStringgrid.Objects), string-prefix, etc.) und dies dann im OnDrawCell auswerten. Nicht vergessen, die Eigenschaft DefaultDrawing des Stringgrids auf false zu setzen, damit das OwnerDraw aktiviert wird.
bei verwendung einer klasse sicherstellen, dass die Objekte auch wieder ordnungsgemäß freigegeben werden (tückisch bei variabler spalten-/zeilenanzahl)
Du kannst auch in TStringgrid.Objects auch nur ein Flag hinterlegen (bis 32Bit integer), ist vielleicht am einfachsten. Zugreifen dann einfach per hardcast.

stringgrid1.objects[0,0]:=TObject(1); if integer(stringgrid1.objects[0,0])=1 then ... das OnDrawCell sieht dann so in etwa aus:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  (sender as TStringgrid).canvas.Brush.color:=(sender as TStringgrid).color;
  if integer(stringgrid1.objects[col,row])=1 then
    (sender as TStringgrid).canvas.Brush.color:=clgreen;
  (sender as TStringgrid).canvas.FillRect(rect);
  (sender as TStringgrid).canvas.TextOut(rect.left+2,rect.top+2,(sender as TStringgrid).Cells[col,row]);
end;
HTH Frank
  Mit Zitat antworten Zitat
DFischer

Registriert seit: 16. Mai 2007
Ort: Bingen am Rhein
2 Beiträge
 
#3

Re: StringGrid Zelle bei ButtonKlick färben?

  Alt 22. Mai 2007, 12:33
Hallo Frank und danke für die Antwort!

Leider verstehe ich größtenteils nur Bahnhof, aaaber:

sobald ich DefaultDrawing = False setze schreibt er mir beim Einloggen in das Programm keine Werte mehr in die Zellen.
Gibt es denn keine einfache Funktion die beim Klick auf den Button eine Zeile färbt ohne Umwege zu gehen?

Würde es helfen wenn ich das Programm hochlade? Der Programmierer, der mir beim Erstellen geholfen hat, wurde leider entlassen

Gruß
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: StringGrid Zelle bei ButtonKlick färben?

  Alt 22. Mai 2007, 13:12
Guck mal vielleicht hilft dir das ist sowas ähnliches

Delphi-Quellcode:
procedure TForm7.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var Celltext :string;
    Farbe :boolean;
    Textformat :cardinal;
    n :integer;
begin
  Textformat:= DT_SINGLELINE;
   with (Sender as TStringGrid) do

    begin
     Celltext:= Cells[ACol, ARow];
     Farbe:= True; //Standardeinstellung der Zellen ist einfarbig

      if (Cells[ACol,ARow] = 'fa') or (Cells[ACol,ARow] = 'FA')then
        begin
          Canvas.Brush.Color:= ClRed; //Zellenfarbe
          Canvas.Font.Color:= ClWhite; //Schriftfarbe
          Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett
        end;

     if (Cells[ACol,ARow] = 'np') or (Cells[ACol,ARow] = 'NP')then
        begin
          Canvas.Brush.Color:= ClBlue; //Zellenfarbe
          Canvas.Font.Color:= ClWhite; //Schriftfarbe
          Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett
        end;

     if (Cells[ACol,ARow] = 'aa') or (Cells[ACol,ARow] = 'AA')then
       begin
        Canvas.Brush.Color:= ClGreen; //Zellenfarbe
        Canvas.Font.Color:= ClWhite; //Schriftfarbe
        Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett
       end;

    if (Farbe) then
       begin
        SetBkMode(StringGrid1.Canvas.Handle, OPAQUE); //Hintergrund überschreiben
        Canvas.FillRect(Rect)
       end;

    if (ACol = 1) or (ACol = 0) then
       begin
        Textformat:= Textformat or DT_CENTER or DT_VCENTER ; //Text wird zentriert
        Canvas.Font.Style:= Canvas.Font.Style + [fsBold]; //Text fett
       end;

    if (ACol > 1) then //Zentrieren für alle Zellen
       begin
        Textformat:= Textformat or DT_CENTER or DT_VCENTER; //Text wird zentriert
       end;
  //Hier wird nun der Text ausgegeben
  DrawText(Canvas.Handle, PChar(Celltext), Length(celltext), Rect,Textformat);
end;
musst du dir nur noch umbastel für dein button

Gruss sascha
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#5

Re: StringGrid Zelle bei ButtonKlick färben?

  Alt 22. Mai 2007, 17:33
hi,
wenn du defaultDrawing ausschaltest MUSST du dich selbst um das zeichnen kümmern (also OnDrawCell definieren und dem Stringgrid zuweisen ).
für das einfärben musst du ownerdraw verwenden, oder du setzt einfach nur die markierung (TStringgrid.row/col), welche dann natürlich immer dem eingestellten Nutzerprofil entspricht.
probiere einfach mal bisschen mit dem Ownerdraw rum, ohne dein vorhandenes backend.

hab meine onDrawCell mal noch soweit ausgebaut, dass die Standard-Fäbung berücksichtigt wird (projektdateien im Anhang), da kannste dir mal anschauen, wie es funktioniert...

@fuknersascha
ich habe bewusst das beispiel einfach gehalten und auf Sachen wie Textausrichtung verzichtet
Angehängte Dateien
Dateityp: zip sg_ownerdraw_141.zip (133,0 KB, 51x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:32 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