AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Schleife durch alle Controls eines Parents liefert falsche Control-Inhalte

Schleife durch alle Controls eines Parents liefert falsche Control-Inhalte

Ein Thema von cltom · begonnen am 24. Jul 2013 · letzter Beitrag vom 21. Aug 2013
Antwort Antwort
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#1

AW: Schleife durch alle Controls eines Parents liefert falsche Control-Inhalte

  Alt 6. Aug 2013, 11:01
Bin zwar neu in Delphi, aber das kann in jeder anderen Sprache denselben Effekt ergeben.

Der Inhalt von Edit-Controls wird im Windows per "SetWindowText" gesetzt. Dies löst üblicherweise eine WM-SETTEXT-Nachricht aus. Da Du mit der Schleife innerhalb des Threads bist (davon gehe ich jedenfalls aus) werden Änderungen, die an den Controls vorgenommen werden erst nach Ende der Schleife verarbeitet.

Es ist zwar denkbar, dass WM_SETTEXT mit "SendMessage" an das Control gegeben wird, es ist aber wahrscheinlich, dass dabei Verklemmungen oder Endlosrekursionen auftreten. So wird WM_SETTEXT nur in der Warteschlange abgelegt und später verarbeitet.

Gruß, Mikkey
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
230 Beiträge
 
Delphi 12 Athens
 
#2

AW: Schleife durch alle Controls eines Parents liefert falsche Control-Inhalte

  Alt 21. Aug 2013, 12:57
Danke für die Hinweise.

Nach einigen Stunden überlegen (und zwei Wochen Urlaub) kam heute die Lösung:

beim Aufruf der Prozedur ControlToStringList hatte ich als ParentControl einen konkreten Form-Namen drin. Das hab ich durch "self" ersetzt und voilà. Jetzt kann man mich vermutlich dafür prügeln, ich nehme aber an, dieses Verhalten liegt daran, dass ich das Formular mit

with TBestimmtesForm.Create(Application) do
Show;

erzeuge.

Deswegen hat es auch als Standalone geklappt, weil da das Formular, das der ControlToStringList übergeben wird, das zum Projektstart erzeugte Hauptform ist. Ich bin aber dankbar für eine fundiertere Erklärung zum Verständnis.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
794 Beiträge
 
#3

AW: Schleife durch alle Controls eines Parents liefert falsche Control-Inhalte

  Alt 21. Aug 2013, 13:23
beim Aufruf der Prozedur ControlToStringList hatte ich als ParentControl einen konkreten Form-Namen drin. Das hab ich durch "self" ersetzt und voilà.

with TBestimmtesForm.Create(Application) do
Show;
Dein "konkreter Form-Name" ist eine globale Variable und wenn du dieser Variablen nicht deine erzeugte Form zuweist (Form2 := TForm2.Create(...)) steht natürlich auch keine Referenz auf die erzeugte Form drin. Da es nicht "geknallt" hat, gehe ich davon aus, dass auch zusätzlich eine Instanz beim Start automatisch von Delphi erstellt wird, worauf dann die Variable verweist.

Wenn es möglich sein soll, mehrere Instanzen des Formulars zu erstellen dann mache Folgendes:
(1) Sicherstellen, dass keine Instanz automatisch erzeugt wird
(2) Lösche die globale Variable weg. Dann kommst du nicht in Versuchung...
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Schleife durch alle Controls eines Parents liefert falsche Control-Inhalte

  Alt 21. Aug 2013, 13:25
Wenn du raten musst, was bei with passiert, verwende es nicht.
Was konkret schiefläuft, ist ohne etwas mehr Code schwer zu sagen.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:40 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