Autor Beitrag
soisseteben
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 21.10.06 19:10 
Hi,
Ich schreibe gerade an einem recht komplexen Programm, wo u.a. einem Button eine OnClick-Ereignisprozedur zugeordnet wird. Wird diese jetzt ausgeführt kommt es so alle 2-4 mal zu einer Zugriffsverletzung. Und jetzt das wirklich komische : die Verletzung findet nach der letzen Anwisung der Ereignisprozedur statt. Also bei der Beendingung der Prozedur oder was weis ich.

Und da ist noch was: wenn ich zum Anfang der Prozedur mir mit "ShowMessage" einen belibigen Text ausgeben lasse, kommt es gleich beim ersten Klick auf den Button zu dieser Zugriffsverletzung am Ende.

Es wird immer versucht auf eine Speicheradresse rund um 00900000 zuzugreifen.

Das ganze macht mich noch ganz wahnsinnig, ich hoffe jemand anderes kann sich das erklären.

Ich denke, das es zu aufwendig und nicht notwendig ist das Program zu posten, kann es aber gern machen wenns wirklich notwendig ist.

Danke, danke, danke schon mal.

_________________
„Wer nur nach dem Zweck der Dinge fragt, wird ihre Schönheit nie entdecken.“ - (Halldór Laxness)
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Sa 21.10.06 19:23 
Poste doch mal die komplette OnClick-Ereignisprozedur, ansonsten wird es sehr schwierig den fehler ausfindig zu machen.

mfg
Phantom1
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 21.10.06 20:27 
Tschuldigung für die aspäte Antwort, aber ich habe einiges neues, verwirrendes herrausgefunden.

Das Problem liegt darin, das ich in der OnClick-Prozedur des Buttons versuche, das Objekt eben dieses Button freizugeben. Das freigeben klappt auch, nur beim beenden der Ereignissprozedur gibt es dann eben diese Zugriffsverletzung.

Was kann ich da machen?

_________________
„Wer nur nach dem Zweck der Dinge fragt, wird ihre Schönheit nie entdecken.“ - (Halldór Laxness)
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Sa 21.10.06 20:31 
Du willst im OnClick-Ereignis eines Buttons genau diesen Button freigeben? Was ist das denn für eine komische Anwendung? Ein Button-Suizid-Kommando?
Damit das klappt, schicke dem Formular eine Message 'WM_USER' (mit PostMessage) und schreib eine entsprechende Messagebehandlungsroutine, die das Objekt dann freigibt. Ich habs nicht getestet, aber es sollte klappen.

_________________
Na denn, dann. Bis dann, denn.
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 21.10.06 20:39 
Naja, nach Klick auf den Button wird ein ne Menge gemacht und dann das Formular geschlossen wo er drauf war. Da der Button dynamisch erzeugt ist, geb ich ihn quasi "von Hand" wieder frei.

Könntest du das, was du grad geschrieben hast, bitte mit ein wenig Beispiel-Code untermauern, ich verstehs kaum.

Danke

_________________
„Wer nur nach dem Zweck der Dinge fragt, wird ihre Schönheit nie entdecken.“ - (Halldór Laxness)
_frank_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 343
Erhaltene Danke: 1

Win XP
Delphi 3 Prof / Turbo Delphi Explorer
BeitragVerfasst: Sa 21.10.06 20:48 
schau dir mal TComponent.Owner an ;)

Gruß Frank
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: Sa 21.10.06 20:54 
Jo, wenn der Owner freigegeben wird, werden alle untergeordneten Komponenten mit freigegeben. Aber ich geb das Objekt des Formulars (der Owner des Buttons) nicht frei, sondern beende (.close) es nur.

Das mit PostMessage hört sich nach der Delphihilfe exakt nach dem an, was ich brauche. Nur hab ich keinen schimmer wie ich das konkret benutze. Bitte ein bissel Beispiel-Code.

Thanks

_________________
„Wer nur nach dem Zweck der Dinge fragt, wird ihre Schönheit nie entdecken.“ - (Halldór Laxness)
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Sa 21.10.06 23:48 
Hallo,

ich bezweifle stark, dass dein Layout gut angelegt ist, aber nun gut:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
interface

const
  UM_DESTROYBUTTON = WM_USER + 12;

type
    {bla}
    procedure DestroyButton(var Msg: TMessage); message UM_DESTROYBUTTON;

procedure TForm1.DestroyButton(var Msg: TMessage);
begin
 TObject(Msg.WParam).Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMessage(Handle, UM_DESTROYBUTTON, Integer(Sender), 0);
end;
Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.10.06 23:54 
Also wenn der Button "ordnungsgemäß" als Owner das Formular hat, dann wird der Button beim Freigeben des Formulars (also auch beim Schließen des Programms) automatisch freigegeben. Und der Owner wird ja dem Konstruktor übergeben. Wenn du da also das Formular übergibst erübrigt sich das manuelle Freigeben.

Und ich meine, wenn das Formular nur versteckt wird, muss dann der Knopf wirklich freigegeben werden? Ich meine, was wenn derselbe Knopf später erneut benötigt würde? Dann wärs doch nicht sinnvoll, den erneut zu erzeugen!
soisseteben Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

Win XP
D7
BeitragVerfasst: So 22.10.06 11:31 
Danke für eure Hilfe. Ich habs jetzt auch so gelöst, das ich den Button permanent auf dem Formular habe. Ich war wohl ein wenig im "dynamische-Komponeneten-erzeugen-Wahn".