AGB  ·  Datenschutz  ·  Impressum  







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

Zelle in DrawGrid dauerhaft einfärben

Ein Thema von hedie · begonnen am 30. Mär 2016 · letzter Beitrag vom 30. Mär 2016
Antwort Antwort
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 08:39
Hallo zusammen

Ich möchte ein "zeichnungstool" für kleine Grafiken erstellen.
Dazu müssen die Pixel recht gross sein.

Deshalb wollte ich dazu ein DrawGrid nehmen.

Um das Pixel bzw. die Zelle zu markieren, habe ich bisher folgenden Code:

Delphi-Quellcode:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if (gdSelected in State) then begin

    DrawGrid1.Canvas.Brush.Color := clBlue;
    DrawGrid1.Canvas.FillRect(Rect);


  end;
Die macht mir die Zelle auch blau, leider bleibt diese aber nicht blau, sobald ich eine andere Zelle anklicke.
Kann mir jemand sagen, wie ich dies erreiche, dass die Zelle markiert bleibt?

Später möchte ich dann zelle um zelle durchgehen um zu sehen welche pixel 1 sind und welche 0.

Danke schonmal
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 08:45
Hallo,

ich hatte mal so was ähnliches gemacht (war aber ein StringGrid)
(ich schalte zwar nur zwischen zwei Farben um, aber das Prinzip sollte sichtbar sein)

Im MouseDown hab ich die Farbe selektiert und als Object in die Zelle geschrieben
Delphi-Quellcode:
procedure TForm3.StringGridMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  ACol : Integer;
  ARow : Integer;
  Farbe : TColor;

begin
  StringGrid.MouseToCell(X, Y, ACol, ARow);

  Farbe := Integer(StringGrid.Objects[ACol, ARow]);

  If Farbe = SelectColor then
    Farbe := StandardColor
  else
    Farbe := SelectColor;

  StringGrid.Objects[ACol, ARow] := Pointer(Farbe);
end;
und in DrawCell der Zelle zugewiesen
Delphi-Quellcode:
procedure TForm3.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  If gdFixed in State then
    exit;

  Rect.Left := Rect.Left - 4;

  StringGrid.Canvas.Brush.Color := Integer(StringGrid.Objects[aCol, ARow]);
  StringGrid.Canvas.FillRect(Rect);
end;
mfg
Helmi

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

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#3

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 09:14
Vielen Dank

Hat bestens geklappt
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 09:24
Sehr gruselig dieser Ansatz.

Man erstellt sich eine Datenklasse und speichert dort die Informationen. Und weil diese Datenklasse ja eine Grafik darstellt spendiert man der auch noch so lustige Methoden wie FromBitmap und ToBitmap oder sogar besser per Assign (ableiten von TPersistent ).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 09:29
Sehr gruselig dieser Ansatz.
Mit welcher Erklärung?
mfg
Helmi

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

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 09:48
Sehr gruselig dieser Ansatz.
Mit welcher Erklärung?
  • Fehlende Trennung von Anzeige und Daten
  • Missbrauch von TObject
  • ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 09:52
warum einfach wenn´s auch kompliziert geht...

Um eine Diskussion vorzubeugen: es gibt immer mehrere Wege zur Lösung
mfg
Helmi

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

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 10:05
Es gibt eben immer mehr schlechte und falsche Wege als gute und richtige
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

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

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 10:10
Es gibt eben immer mehr schlechte und falsche Wege als gute und richtige
bislang hab ich nur Mängel an meiner Lösung gelesen, aber noch keine "gute und richtige" Lösung gesehen
mfg
Helmi

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

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Zelle in DrawGrid dauerhaft einfärben

  Alt 30. Mär 2016, 10:17
Es gibt eben immer mehr schlechte und falsche Wege als gute und richtige
bislang hab ich nur Mängel an meiner Lösung gelesen, aber noch keine "gute und richtige" Lösung gesehen
Deine Lösung kann mit einem simplen Array schon verbessert werden. Muss man das jetzt explizit aufschreiben?

Runder wird das mit einer Klasse, wo man noch ein paar Hilfsmethoden dranbaut um aus dem Farbarray ein Bitmap zu bauen.

Das Konzept hatte ich ja schon skizziert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 15:57 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