AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Sichtbarkeit Werte in StringGridzelle
Thema durchsuchen
Ansicht
Themen-Optionen

Sichtbarkeit Werte in StringGridzelle

Ein Thema von vesila · begonnen am 14. Jan 2025 · letzter Beitrag vom 18. Jan 2025
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#1

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 13:32
StringGrid.cells[0,1] das ist immer dieselbe Zelle, unabhängig davon, welchen Wert i gerade hat.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
vesila

Registriert seit: 11. Jan 2025
Ort: Minden
9 Beiträge
 
Delphi 12 Athens
 
#2

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 15:11
Danke DeddyH für die Info.

Das Schreiben der Werte in eine Zelle habe ich bewußt zu Testzwecken gemacht, es ist einfacher den Verlauf im Debuggerfenster "Überwachte Ausdrücke" zu verfolgen.
Dort kann ich sehen, das die Werte wie erwünscht in die Zelle eingetragen werden, nur in der Zelle selber sind sie nicht sichtbar.
Mir geht es um die Sichtbarkeit. Warum sind die eingetragenen Werte nicht in der STringGridzelle sichtbar.

Viele Grüße vesila
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
656 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 15:26
Dein Code wird nur in der ersten Zelle (0,1) den Wert "31" anzeigen, sonst nichts. Das ist der letzte Wert deiner FOR Schlaufe, bei der du bei jedem Druchlauf die erste Zelle (0,1) überschreibst. Wie schon geschrieben, müsste es StringGrid.cells[0,i]:=IntToString(i) heissen.

Folgendes funktioniert wie es soll:
Delphi-Quellcode:
var
  i: integer;
begin
  StringGrid1.RowCount := 32; // 32 Zeilen, da du erst ab der 2. abfüllst. Die erste Zeile wäre 0.
  for i := 1 to 31 do // ab der 2. Zeile werden die folgenden 31 Zeilen der ersten Spalte abgefüllt
  begin
    StringGrid1.cells[0,i]:=IntToStr(i);
  end;
end;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#4

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 16:16
vesila möchte in der Zelle [0,1] den jeweiligen Wert von i sehen. Das da immer in die gleiche Zelle geschrieben wird ist bekann und gewollt, um beim Debuggen dort sehen zu können, ob jeweils der entsprechende Wert erscheint.
Die insgesamt 32 Werte sind beim Debuggen aber ausnahmslos nicht zu sehen. Es müsste aber beobachtet werden können, dass sich der Wert von Zelle [0,1] 32mal ändert. Dem ist aber nicht so. Nur der Wert in den überwachten Ausdrücken ändert sich. Sprich: Bei i = 31 steht in den überwachten Ausdrücken für die Zelle [0,1] der Wert 31. Aber dieser Wert ist im Stringgrid in der Anzeige nicht sichtbar. Es gibt also einen Unterschied zwischen dem überwachten Ausdruck für Zelle [0,1] und der Anzeige im Grid. Die Frage ist: Warum?
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
656 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 16:53
Sehe das Problem nicht wirklich, da das bei mir problemlos funktioniert, auch wenn ich Cells[0,1] abfülle und abfrage. Da steht bei jedem Durchlauf der Wert von i drin, wie es zu erwarten ist. Der Breakpoint habe ich auf dem "end" der For-Schlaufe und seheh dann jeweils den aktuellen Wert von i in Cell[0,1].

Leider ist sein OP recht unklar und verwirrend. Mir ist auf jeden Fall noch nicht klar was sein Problem denn nun genau ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.555 Beiträge
 
Delphi 12 Athens
 
#6

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 16:56
Mir ist auf jeden Fall noch nicht klar was sein Problem denn nun genau ist.
Das wurde ja eingentlich schon mehrfach genau erwähnt.

Anstatt in der Schleife die Variable i zu nutzen, wurde eine statische 1 verwendet.

Was jetzt so wer daran ist, diesen Fehler bei sich zu beheben .... keine Ahnung, es wurde ja nichts weiter zu gesagt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
656 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 17:39
Ja aber was will er denn nun genua sehen? Die Werte werden doch im Debugger richtig angezeigt. Meint er eventuell visuell in seinem StringGrid während dem Debuggen? Das kann nicht funktionieren, da beim Debuggen die Anwendung pausiert wird/ist und damit auch keine Messages, etc. verarbeiten kann. Zur Anzeige der Werte im Grid müssen diverse Messages verarbeitet werden, Z.B. WM_PAINT, etc. Das geht erst wieder wenn die Anweundung im Messageloop ist oder man Applicaton.ProcessMessages im FOR Loop aufruft.

Folgender Code zeigt nach der Zeile mit ProcessMessages die Zahlen auch visuell im Grid an, da dadurch alle anstehenden Messages verarbeitet werden, die zur Anzeige der Cel-Werte im StringGrid ausgeführt werden müssen.

Delphi-Quellcode:
var
  i: integer;
begin
  StringGrid1.RowCount := 32; // 32 Zeilen, da du erst ab der 2. abfüllst. Die erste Zeile wäre 0.
  for i := 1 to 31 do // ab der 2. Zeile werden die folgenden 31 Zeilen der ersten Spalte abgefüllt
  begin
    StringGrid1.cells[0,i]:=IntToStr(i);
    Application.ProcessMessages; // Nach dieser Zeile wird der Wert im StringGrid angezeigt.
  end;
end;
  Mit Zitat antworten Zitat
vesila

Registriert seit: 11. Jan 2025
Ort: Minden
9 Beiträge
 
Delphi 12 Athens
 
#8

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 15. Jan 2025, 21:47
Guten Abend liebe Mitstreiter,

vielen Dank für die Hilfen.
Delphi.Narium hat erkannt was ich wissen möchte. Die Werte werden laut Debugger Fenster in die Zelle des StringGrids geschrieben aber sie sind dort
nicht sichtbar. Auch wenn ich die For Schleife ohne Debugger Fenster vollständig durchlaufen lasse ist im StringGrid nur eine weiße Fläche zu sehen.
Die Anweisung Application.ProcessMessages kennt die Anwendung nicht und es tritt ein Laufzeitfehler auf.
Ich denke, ich muss im Objektinspektor des StringGrid ein oder mehrere Eigenschaften ändern, ich weiß nur nicht welche.

Viele Grüße vesila
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#9

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 16. Jan 2025, 12:14
Anstatt in der Schleife die Variable i zu nutzen, wurde eine statische 1 verwendet.

Was jetzt so wer daran ist, diesen Fehler bei sich zu beheben .... keine Ahnung, es wurde ja nichts weiter zu gesagt.
Das ist ja eben nicht der Fehler. Der Fehler ist die mangelnde Sichtbarkeit der zugewiesenen Werte in Zelle [0,1].

Und es wird nicht das falsche StringGrid verwendet, da in den überwachten Ausdrücken der korrekte Wert im korrekten Stringgrid zu sehen ist.

Und da es sich (laut Profil) um Delphi 6 handelt, tendiert die Wahrscheinlichkeit, dass das Problem von irgendwem nachgestellt werden kann (leider) gegen Null.

Ich möchte mal nicht ausschließen, dass das StringGrid erst nach Beendigung der Routine mit all seinen "neuen" Inhalten neu gezeichnet wird und deshalb die Werte erst nach Abschluss der Routine sichtbar werden und noch nicht, wenn in der Routine im Debugger an einem Breakpoint gehalten wird.

Habe mal 'ne KI befragt, demnach gibt es in Delphi 6 beim Neuzeichnen eines StringGrid einen Bug, der genau dieses Problem verursachen könnte. Eine kleine Abwandlung der Routine könnte eventuelle hilfreich sein:
Delphi-Quellcode:
For i := 1 to 31 do
Begin
  StringGrid.cells[0,1] := IntToStr(i);
  StringGrid.Invalidate;
End; // hier den Breakpoint setzen.
Ich nehme mal an, dass bei diesem Konstrukt das Grid einfach nicht neu gezeichnet wird da innerhalb der Schleife keine Paint-Messages verarbeitet werden können.
Ja, genau das ist das Problem.

In der gegebenen Routine wird das StringGrid in Delphi 6 nicht automatisch neu gezeichnet, sodass die Werte nicht sofort sichtbar werden. Das liegt daran, dass Delphi aus Performancegründen nicht nach jeder Änderung ein Neuzeichnen auslöst
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
724 Beiträge
 
Delphi 12 Athens
 
#10

AW: Sichtbarkeit Werte in StringGridzelle

  Alt 16. Jan 2025, 11:58
vesila möchte in der Zelle [0,1] den jeweiligen Wert von i sehen. Das da immer in die gleiche Zelle geschrieben wird ist bekann und gewollt, um beim Debuggen dort sehen zu können, ob jeweils der entsprechende Wert erscheint.
Die insgesamt 32 Werte sind beim Debuggen aber ausnahmslos nicht zu sehen. Es müsste aber beobachtet werden können, dass sich der Wert von Zelle [0,1] 32mal ändert. Dem ist aber nicht so. Nur der Wert in den überwachten Ausdrücken ändert sich. Sprich: Bei i = 31 steht in den überwachten Ausdrücken für die Zelle [0,1] der Wert 31. Aber dieser Wert ist im Stringgrid in der Anzeige nicht sichtbar. Es gibt also einen Unterschied zwischen dem überwachten Ausdruck für Zelle [0,1] und der Anzeige im Grid. Die Frage ist: Warum?
Ich nehme mal an, dass bei diesem Konstrukt das Grid einfach nicht neu gezeichnet wird da innerhalb der Schleife keine Paint-Messages verarbeitet werden können.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:33 Uhr.
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