![]() |
Fehler beim Erstellen des Fenster - GeräteKontextes
Hallo,
ich habe eine Anwendung die mit vielen Elementen TPageControl und TRadioGroup ausgestattet ist. Ich habe hein Thread geschrieben, der nach dem Starten der Anwendung und der Anmeldung des Nutzers die Radiogroups mit Items füllt. Nachdem der Thread durchgelaufen ist, sind die Radiogroups die von ihm gefüllt wurden nicht mehr sichtbar und es wird die o.g. Fehlermeldung ausgelöst. Ich bin den Quelltext Schrittweise durchgegangen und der Thread macht was er soll. Wo kann das Problem liegen?
Delphi-Quellcode:
procedure DVLThread.Execute;
var RadiogroupX : TRadiogroup; begin DataModule9.Table1.Filtered:=false; DataModule9.Table1.First; while not DataModule9.Table1.Eof do begin {Ermitteln der Radiogroup} if not rg_zuweisen(DataModule9.Table1.fieldbyname('kern').AsInteger,DataModule9.Table1.fieldbyname('teil').AsInteger, DataModule9.Table1.fieldbyname('gruppe').AsInteger, DataModule9.Table1.fieldbyname('typ').AsInteger, RadiogroupX) then begin {Auflisten der nicht zuweisbaren Einträge aus der DB} form1.Memo2.Lines.Add(DataModule9.Table1.fieldbyname('hinweis').AsString); end else begin {Einschränkung der Anzeige nach Nutzerrecht, rechte_xl ist eine globale Variable die bei der Anmeldung gesetzt wurde} if (rechte_xl='AL') and (DataModule9.Table1.fieldbyname('recht').asinteger=0) then begin RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString); end else begin RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString); end; end; DataModule9.Table1.Next; end; end; |
Re: Fehler beim Erstellen des Fenster - GeräteKontextes
Man greift nicht unsynchronisiert von einem Thread auf die VCL zu, :!:
denn dann passieren die komischsten Dinge. auch wenn es mit dem Thema nichts zu tun hat ... was ist hier bitte der Unterschied?
Delphi-Quellcode:
begin
RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString); end else begin RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString); end; |
Re: Fehler beim Erstellen des Fenster - GeräteKontextes
Hallo,
die Bedingung
Delphi-Quellcode:
einer darf alles sehen und der andere nur einen Ausschnitt. Das kommt aus der Anmeldung heraus und funktioniert auch.
(rechte_xl='AL') and (DataModule9.Table1.fieldbyname('recht').asinteger=0)
Zitat:
|
Re: Fehler beim Erstellen des Fenster - GeräteKontextes
Zitat:
Delphi-Quellcode:
RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString);
RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString); Zitat:
Das ist so, als wenn zwei Autos ohne Licht und in entgegengesetzten Richtungen durch einen dunkeln Tunnel wollen ... irgendwann kracht es halt. Die Lösung währe theoretisch ![]() aber da du in sehr kurzen Abständen und verhältnismäßig oft auf die VCL zugreifen willst, wäre hier der Thread so "sinnlos", da Synchronize die Befehle in den Kontext des Hauptthreads verlegt (wo die VCL drinnen läuft) Einzige Lösung mit Thread wäre, wenn in dem Thread die DB abgefragt würde, erstmal alles zwischengespeichert würde (z.B. in Stringlisten/Arrays innerhalb des Threads und dann am Ende (eventuell auch schon ein paar Male zwischendurch, wenn es länger dauert und man auch schon Teilergebnisse sehn will) einmal via Synchronize die Werte aus diesen Zwischenspeichern in die VCL-Komponenten übertragen würde. |
Re: Fehler beim Erstellen des Fenster - GeräteKontextes
Hallo,
danke für den Hinweis und die Erklärung dazu. Werde die Stelle umbauen und demnächst einfach vermeiden auf die VCL zuzugreifen. |
Re: Fehler beim Erstellen des Fenster - GeräteKontextes
Nachtrag:
Die Bedingung war tatsächlich absoluter Müll, danke für den Hinweis... :wall: |
Re: Fehler beim Erstellen des Fenster - GeräteKontextes
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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