AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RadioButton aus Thread nicht Löschbar

Ein Thema von Metschu · begonnen am 9. Aug 2018 · letzter Beitrag vom 10. Aug 2018
Antwort Antwort
Seite 1 von 2  1 2      
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 09:11
Delphi-Version: 10.2 Tokyo
Hallo zusammen,

ich habe eine RadioGroup und möchte hier je einen Button raus löschen:

InfoForm.Positionen.Items.Delete(2)

Wenn ich dies aus einem Thread heraus machen möchte, bekomme ich die Fehlermeldung

"Im Projekt ist eine Exception der Klasse EOSError mit der Meldung 'Systemfehler. Code: 5.
Zugriff verweigert' aufgetreten.
"

Spaßeshalber habe ich einen Button auf die MainForm gelegt und hier auch den Befehl rein gesetzt.
Klicke ich den Button bei laufendem Thread, wird der RadioButton gelöscht.
Wird die Procedure des Buttons durch den Thread aufgerufen, habe ich den gleichen Fehler wieder...

Wo liegt mein Problem?

Danke schon mal.

Gruß

Torsten
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 09:18
Wo liegt mein Problem?
Du greifst auf VCL-Objekte aus einem anderen Thread als dem Hauptthread zu.

Für solche Dinge gibt es Synchronize.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Metschu

Registriert seit: 31. Dez 2006
151 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 11:06
Hallo Uwe,

vielen dank für den Tipp, das hat Funktioniert.

Für mich war es nur seltsam, das ich die Texte der Radio-Buttons ändern konnte ohne Fehlermeldung - nur beim löschen kam diese immer wieder...

Gruß

Torsten
Torsten
Ich kam, sah und alles Funktionierte.
Dann klingelte mein Wecker...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 11:17
Für mich war es nur seltsam, das ich die Texte der Radio-Buttons ändern konnte ohne Fehlermeldung
Nur weil etwas funktioniert, ist es noch lange nicht richtig.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 11:26
Für mich war es nur seltsam, das ich die Texte der Radio-Buttons ändern konnte ohne Fehlermeldung
Ein SendMessage/Perform an ein WinControl ist auch aus anderen Threads möglich, da Messages von Windows automatisch in den Thread synchronisiert werden, in welchem diese Komponente erstellt wurde.

Wenn beim Setzen der Caption im Setter aber noch mehr gemacht wird, wie z.B. direkt auf Variablen/Felder dieser Komponente oder auf verbundene "globale" bzw. verbundene Komponenten/Listen/... zuzugreifen, dann kann wird es schnell schief laufen,
so wie man es beim Delete/Free leidlich bemerkt.


Zitat:
Delphi-Quellcode:
property Caption: TCaption read GetText write SetText stored IsCaptionStored;

procedure TControl.SetText(const Value: TCaption);
begin
  if GetText <> Value then
    SetTextBuf(PChar(Value));
end;

function TControl.GetText: TCaption;
var
  Len: Integer;
begin
  Len := GetTextLen;
  SetString(Result, PChar(nil), Len);
  if Len <> 0 then
    GetTextBuf(PChar(Result), Len + 1);
end;

procedure TControl.SetTextBuf(Buffer: PChar);
begin
  Perform(WM_SETTEXT, 0, Buffer);
  Perform(CM_TEXTCHANGED, 0, 0);
end;

function TControl.GetTextLen: Integer;
begin
  Result := Perform(WM_GETTEXTLENGTH, 0, 0);
end;

function TControl.GetTextBuf(Buffer: PChar; BufSize: Integer): Integer;
begin
  Result := Perform(WM_GETTEXT, BufSize, Buffer);
end;
Aber dennoch bei sowas nicht immer drauf verlassen, dass es immer so implementiert bleibt, sondern direkt die Messages verschicken.
$2B or not $2B

Geändert von himitsu ( 9. Aug 2018 um 12:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 11:56
offtopic
Aber dennoch bei sowas nicht immer drauf verlassen, dass es immer so implementiert bleibt, sondern direkt die Messages verschicken.
Top-Tipp, der löst bei mir auch ein GUI Thread Problem, Vielen Dank dafür!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 15:00
Top-Tipp, der löst bei mir auch ein GUI Thread Problem, Vielen Dank dafür!
Es gibt ja auch von mir ein neues Projekt genau das Prinzip einfach zu verwenden:
https://github.com/jaenicke/MTCL
Das Interesse scheint sich in Grenzen zu halten. Aber dort wollte ich auch genau die Möglichkeit hinzufügen, dass man aus Threads auch mit VCL-Komponenten transparent interagiert. Mal schauen wann ich dafür mal wieder etwas Zeit habe.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 18:26
Mit dem Delphi Starter von Dir bin ich super klargekommen, ich werde bei dem MTCL auf jeden Fall mal einen Blick rauf werfen was da so passiert und obs es für D2009 geeignet ist.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 19:17
ich werde bei dem MTCL auf jeden Fall mal einen Blick rauf werfen was da so passiert und obs es für D2009 geeignet ist.
Ist es, auch wenn Delphi 2009 so buggy war, dass ich da glaube ich leider nur den Modus für Delphi 7 usw. nutzen konnte per IFDEF... Generics waren damals leider noch extrem buggy und kaum nutzbar.

Nimm doch die Community Edition, falls die Rahmenbedingungen passen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: RadioButton aus Thread nicht Löschbar

  Alt 9. Aug 2018, 23:03
Zitat:
I recommend using Delphi 2010 or higher, because only with generics you do not need to cast everywhere. And it is faster because TDictionary is used instead of simply searching in a list for a control. Delphi 2009 does not work, because generics were not powerful enough there.
Wenn es nur die Performance betrifft, bin ich mit 2009 glücklich aber ich Suche bereits hier und da nach einer gebrauchten 2010er Lizenz.
Das Problem mit der CE ist bei mir der Wiederverwendbarkeitsfaktor, also was die Übertragenen Dateien betrifft, ein reiner WebInstall ist für mich ein no-go solange ich mein System noch nicht neu bespielt habe. Dann installiere ich die CE in eine VM, ab da ist mir mein no-go von oben egal da ich die VM duplizieren kann.

Ich teste mal das MTCL aus, bei Bedarf erstelle ich Dir ein Update für neuere Versionen wie ichs mit dem Starter-Tool getan habe.
Mein GitHub ist allerdings irgendwie für mich selbst nicht mehr veränderbar.... Seitdem ich von Win7 auf Win10 bin ist zwar der Zugang und ein Verzeichnisse anlegen möglich, ein löschen bzw datei-uploaden klappt gar nicht mehr. Dazu in einem anderen Thread, sowie meinerseits bedarf besteht, mehr.

Danke auf jeden Fall für die Information das es bereits eine Komponente gibt die sich um solche Dinge kümmern könnte!!
Gruß vom KodeZwerg
  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 11:04 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