Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   RadioButton aus Thread nicht Löschbar (https://www.delphipraxis.net/197479-radiobutton-aus-thread-nicht-loeschbar.html)

Metschu 9. Aug 2018 08:11

Delphi-Version: 10.2 Tokyo

RadioButton aus Thread nicht Löschbar
 
Hallo zusammen,

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

Delphi-Quellcode:
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

Uwe Raabe 9. Aug 2018 08:18

AW: RadioButton aus Thread nicht Löschbar
 
Zitat:

Zitat von Metschu (Beitrag 1410194)
Wo liegt mein Problem?

Du greifst auf VCL-Objekte aus einem anderen Thread als dem Hauptthread zu.

Für solche Dinge gibt es Synchronize.

Metschu 9. Aug 2018 10:06

AW: RadioButton aus Thread nicht Löschbar
 
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

Uwe Raabe 9. Aug 2018 10:17

AW: RadioButton aus Thread nicht Löschbar
 
Zitat:

Zitat von Metschu (Beitrag 1410205)
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.

himitsu 9. Aug 2018 10:26

AW: RadioButton aus Thread nicht Löschbar
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1410206)
Zitat:

Zitat von Metschu (Beitrag 1410205)
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.

KodeZwerg 9. Aug 2018 10:56

AW: RadioButton aus Thread nicht Löschbar
 
offtopic
Zitat:

Zitat von himitsu (Beitrag 1410210)
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!:thumb::thumb:

jaenicke 9. Aug 2018 14:00

AW: RadioButton aus Thread nicht Löschbar
 
Zitat:

Zitat von KodeZwerg (Beitrag 1410214)
Top-Tipp, der löst bei mir auch ein GUI Thread Problem, Vielen Dank dafür!:thumb::thumb:

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.

KodeZwerg 9. Aug 2018 17:26

AW: RadioButton aus Thread nicht Löschbar
 
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.

jaenicke 9. Aug 2018 18:17

AW: RadioButton aus Thread nicht Löschbar
 
Zitat:

Zitat von KodeZwerg (Beitrag 1410255)
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. ;-)

KodeZwerg 9. Aug 2018 22:03

AW: RadioButton aus Thread nicht Löschbar
 
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!!:thumb:

jaenicke 9. Aug 2018 22:24

AW: RadioButton aus Thread nicht Löschbar
 
Zitat:

Zitat von KodeZwerg (Beitrag 1410270)
Wenn es nur die Performance betrifft

Naja, auch die Verwendung... es ist ohne Generics halt extrem umständlich.

Zitat:

Zitat von KodeZwerg (Beitrag 1410270)
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.

Das Problem verstehe ich nicht. Ich nutze die ISO schon lange nicht mehr.

KodeZwerg 9. Aug 2018 22:50

AW: RadioButton aus Thread nicht Löschbar
 
Es gibt Monate da bespiele ich 3-5x mein System neu, dafür jedes mal alles von vorne laden zu müssen geht mir gegen den Strich da ich Rechner idR offline vorbereite. Wie gesagt, sobald ich wieder mal bespiele, kommt VM rauf, ab da an ist es okay einmal geladen zu haben. Zur Zeit ist VM nicht durchsetzbar da ich falsch partitioniert habe. Bei mir wird was HDD betrifft zwar viel geplant, aber das hatte ich beim letzten mal nicht auf dem Schirm gehabt.
Ich wechsle sehr oft meine Hardware was eine Windows neu Installation meist erforderlich macht, falls gefragt wird wieso so oft.

Luckie 10. Aug 2018 06:40

AW: RadioButton aus Thread nicht Löschbar
 
Kurze Zwischenfrage aus purer Neugier. Warum installierst du deinen Rechner 3 bis 5 mal im Monat neu? mein Rechner mit Windows 7 ist jetzt 5 oder 6 Jahre alt und noch genauso schnelle wie am ersten Tag.

KodeZwerg 10. Aug 2018 07:09

AW: RadioButton aus Thread nicht Löschbar
 
Zitat:

Zitat von Luckie (Beitrag 1410285)
Kurze Zwischenfrage aus purer Neugier. Warum installierst du deinen Rechner 3 bis 5 mal im Monat neu? mein Rechner mit Windows 7 ist jetzt 5 oder 6 Jahre alt und noch genauso schnelle wie am ersten Tag.

Einfach bis zum Ende lesen, dann klärt sich so einiges auf :wink:
Zitat:

Zitat von KodeZwerg (Beitrag 1410277)
Ich wechsle sehr oft meine Hardware was eine Windows neu Installation meist erforderlich macht, falls gefragt wird wieso so oft.


jaenicke 10. Aug 2018 08:38

AW: RadioButton aus Thread nicht Löschbar
 
Das passt nicht in den Thread, deshalb hatte ich dazu nix geschrieben, daher nur kurz:
Selbst als ich Mainboard, CPU und RAM getauscht habe lief Windows 10 ganz normal weiter nach kurzer Hardwareerkennung. Nur beim Wechsel von BIOS zu UEFI geht das natürlich nicht. Aber wenn man einfach nur Teile der Hardware ändert, bekommt man normalerweise eher Probleme mit der Lizenz denn mit der Technik.

Damals bei XP und Windows 7 sah das natürlich noch anders aus, da ging das nicht so ohne weiteres. Aber heute?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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