AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

Ein Thema von alleinherrscher · begonnen am 9. Aug 2012 · letzter Beitrag vom 10. Aug 2012
Antwort Antwort
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 15:08
Hiho, ich nutze die Standard Windows VCL. Im OnDrawCell möchte ich gerne in bestimmten Fällen den Inhalt einer Zelle ändern. (Es soll später ein kleines Bild in die Zelle, der Zelltext soll eingerückt werden).

Das Einrücken übernehme ich nun testweise im OnDrawCell, was auch klappt, bis die entsprechende Zelle selektiert ist:

Delphi-Quellcode:
   if (arow>0) and (acol=1) then
   begin
     if pos('TICKETNUMBER',orderby)>0 then
     begin
       if (DL[arow-1].ticketNumber<>-1) and (ExitsSameTicketNumberBefore(arow-1, DL[arow-1].ticketNumber)) then
          begin
            str:='>>'+sgDataList.Cells[ACol, ARow];
            sgDataList.Canvas.TextRect(Rect,Rect.Left + 2,Rect.top+((Rect.Bottom-Rect.top)-sgDataList.Canvas.TextHeight(str)) div 2,str);
          end;
     end;
Ergebnis: Siehe Anhang: Links: Zelle nicht selektiert, rechts: Zelle selektiert.

Was (edit) kann (/edit) ich machen, außer komplett auf ein DrawGrid (edit) zu wechseln (/edit)?

Danke und besten Gruß,
Michael
Miniaturansicht angehängter Grafiken
clipboard01.png  
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS

Geändert von alleinherrscher ( 9. Aug 2012 um 16:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 15:15
Was ich machen, außer komplett auf ein DrawGrid welchen?
WHAT?

Ist das die ganze Methode oder nur ein Teil davon? Poste doch mal alles bitte! Rufst du vielleicht irgendwo inherited OnDrawCell() auf, wo es nicht sein sollte?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#3

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 15:46
Vielleicht den Canvas vorher löschen bevor du den Zelleninhalt schreibst. Unterscheidest du nach Selected?
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#4

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 16:09
Was ich machen, außer komplett auf ein DrawGrid welchen?
WHAT?

Ist das die ganze Methode oder nur ein Teil davon? Poste doch mal alles bitte! Rufst du vielleicht irgendwo inherited OnDrawCell() auf, wo es nicht sein sollte?
Sorry, da fehlen nicht die Deutschkenntnisse, sondern nur ein "kann" Das ist der Inhalt der OnDrawCell Prozedur. Ansonsten ist nur noch der Code, der die E-Mail Icons in die erste Spalte zeichnet, davor, der aber keinen Einfluss auf den hier gezeigten Effekt hat.

@Hobby-Programmierer: Nein, ich unterschiede nicht nach "Selected", das ist ja, was mich wundert. State:TGridDrawState wird bei mir NICHT abgefragt.
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 16:35
Aber wenn die Zelle "selected" ist wird ja zumindestens der Hintergrund schön gemalt, wenn auch der Inhalt anders gezeichnet wird??

Das mit der Grammatik interessiert mich aber auch
"Was kann ich machen, außer komplett auf ein DrawGrid ????? "

Gruß
K-H

Zusatz:
Zitat:
Delphi-Quellcode:
Cells
        A ColCount by RowCount array of strings which are associated with each
        cell. By default, the string is drawn into the cell before OnDrawCell
        is called. This can be turned off (along with all the other default
        drawing) by setting DefaultDrawing to false.
procedure TStringGrid.DrawCell(ACol, ARow: Longint; ARect: TRect;
  AState: TGridDrawState);
begin
  if DefaultDrawing then
    Canvas.TextRect(ARect, ARect.Left+2, ARect.Top+2, Cells[ACol, ARow]);
  inherited DrawCell(ACol, ARow, ARect, AState);
end;
aus der Unit Grids
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 9. Aug 2012 um 16:42 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#6

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 16:49
Ansonsten ist nur noch der Code, der die E-Mail Icons in die erste Spalte zeichnet, davor, der aber keinen Einfluss auf den hier gezeigten Effekt hat.
Die Behauptung in der zweiten Satzhälfte bezweifle ich ...
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 16:50
Aber wenn die Zelle "selected" ist wird ja zumindestens der Hintergrund schön gemalt, wenn auch der Inhalt anders gezeichnet wird??

Das mit der Grammatik interessiert mich aber auch
"Was kann ich machen, außer komplett auf ein DrawGrid ????? "
Das mit der Grammatik habe ich oben korrigiert [ot] Nebenbei lief das Radio und jemand berichtete über Olympia. Da kommt man schon mal durcheinander. [/ot]

Es scheint so zu sein, als würde NACH dem OnDrawCell noch der Selectedbereich inkl. Text gezeichnet.

Vielleicht liegt es daran, dass ich einen Delphi XE2 VCL-Style verwende?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#8

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 9. Aug 2012, 22:31
Nabend,
ich hatte deine Frage falsch verstanden!
Du unterliegst dem Logikfehler beim 'malen' eine Auswahl über den Zellinhalt zu treffen. Das DrawCell - Event ist dafür denkbar ungeeignet, denn selber zeichnen möchtest du doch eigentlich gar nicht.
Den Zelleninhalt würde ich entweder in OnClick oder noch besser in SelectCell ändern.

LG Mario
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#9

AW: StringGrid OnDrawCell, eigener Inhalt wird überschrieben, wenn Zelle selektiert

  Alt 10. Aug 2012, 00:53
Nabend,
ich hatte deine Frage falsch verstanden!
Du unterliegst dem Logikfehler beim 'malen' eine Auswahl über den Zellinhalt zu treffen. Das DrawCell - Event ist dafür denkbar ungeeignet, denn selber zeichnen möchtest du doch eigentlich gar nicht.
Den Zelleninhalt würde ich entweder in OnClick oder noch besser in SelectCell ändern.

LG Mario
Nene, ich möchte schon malen. Ich möchte ja ein Icon vor meinen Text auf die Canvas malen. Dafür brauche ich doch das DrawCell. Ich glaube aber, es ist das beste, wenn man schon selber malen möchte, direkt ein DrawGrid zu nehmen oder (wie ich es jetzt gemacht habe) das Icon in eine schmale neue Spalte vor dem Text zu malen.

Grüße und besten Dank an alle,
Michael
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  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 02: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