AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fehler beim Erstellen des Fenster - GeräteKontextes
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Erstellen des Fenster - GeräteKontextes

Ein Thema von simmi · begonnen am 9. Nov 2009 · letzter Beitrag vom 11. Nov 2009
Antwort Antwort
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#1

Fehler beim Erstellen des Fenster - GeräteKontextes

  Alt 9. Nov 2009, 18:12
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;
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Fehler beim Erstellen des Fenster - GeräteKontextes

  Alt 9. Nov 2009, 18:21
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;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Fehler beim Erstellen des Fenster - GeräteKontextes

  Alt 9. Nov 2009, 18:27
Hallo,

die Bedingung
(rechte_xl='AL') and (DataModule9.Table1.fieldbyname('recht').asinteger=0) einer darf alles sehen und der andere nur einen Ausschnitt. Das kommt aus der Anmeldung heraus und funktioniert auch.

Zitat:
Man greift nicht unsynchronisiert von einem Thread auf die VCL zu, Exclamation
denn dann passieren die komischsten Dinge.
Jetzt stehe ich im dunkeln. Das war mein erster Versuch mit einem Thread. Wie syncornisiert man das Teil???? In dem Tutorial habe ich dazu nichts gefunden.
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Fehler beim Erstellen des Fenster - GeräteKontextes

  Alt 9. Nov 2009, 18:39
Zitat von simmi:
einer darf alles sehen und der andere nur einen Ausschnitt. Das kommt aus der Anmeldung heraus und funktioniert auch.
Nja, die Abfrage ist schon klar, aber die beiden Alternativen sind genau gleich
Delphi-Quellcode:
RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString);
RadiogroupX.Items.Add(DataModule9.Table1.fieldbyname('hinweis').AsString);
Zitat von simmi:
Jetzt stehe ich im dunkeln. Das war mein erster Versuch mit einem Thread. Wie syncornisiert man das Teil???? In dem Tutorial habe ich dazu nichts gefunden.
Die VCL ist nicht threadsicher, daß bedeutet, daß gleichzeitige Zugriffe (die VCL greift auch noch auf sich selber zu, wenn z.B. die Form und ihre Komponenten dargestellt wird) zu Problemen führen können.

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 Delphi-Referenz durchsuchenSynchronize,
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Fehler beim Erstellen des Fenster - GeräteKontextes

  Alt 10. Nov 2009, 08:45
Hallo,

danke für den Hinweis und die Erklärung dazu. Werde die Stelle umbauen und demnächst einfach vermeiden auf die VCL zuzugreifen.
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von simmi
simmi

Registriert seit: 24. Nov 2004
Ort: Röbel/Müritz
112 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Fehler beim Erstellen des Fenster - GeräteKontextes

  Alt 11. Nov 2009, 13:19
Nachtrag:

Die Bedingung war tatsächlich absoluter Müll, danke für den Hinweis...
Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Fehler beim Erstellen des Fenster - GeräteKontextes

  Alt 11. Nov 2009, 13:24
Zitat von simmi:
Wie syncornisiert man das Teil???? In dem Tutorial habe ich dazu nichts gefunden.
Du liest die falschen Tutorials.
http://delphitutorials.michael-puff.de
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 18:23 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