Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Zugriffsverletzung durch neues Formular-Objekt (https://www.delphipraxis.net/127303-zugriffsverletzung-durch-neues-formular-objekt.html)

nahpets 12. Jan 2009 15:31

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Hallo,

@SebE

bei meinem Delphi 7 funktioniert das Toolbutton1.Enabled := True ohne Probleme.
Du schreibst, Du hättest den Toolbutton auf die Toolbar gezogen, wie geht das? Habe meine Toolbuttons per Rechtsklick und Menüeintrag erstellt. Gibt es da eventuell einen Unterschied zwischen TToolbutton?
Kann mich schwach erinnern, so ein Problem vor längerer Zeit auch mal gehabt zu haben und das die Toolbuttons nur dann funktionierten, wenn ich sie über Rechtsklick auf die Toolbar und Neuer Schalter hinzugefügt hatte.

Lass Dir doch mal
Delphi-Quellcode:
ShowMessage(Sender.ClassName);
beim Klick auf den Button anzeigen, eventuell kommst Du so ja dahinter, was da für ein Objekt im Sender steht.

SebE 12. Jan 2009 15:38

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Ich hab herausgefunden, dass es nicht nur bei ToolButtons passiert, sondern bei allen neuen Objekte, die nicht schon vorhanden sind.

"Draufgezogen" heißt natürlich Rechtsklick -> "Neuer Schalter".

Ich weiß, dass es das richtige Objekt ist, da "TToolButton(Sender).Enabled := false" funktioniert.

nahpets 12. Jan 2009 16:01

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Hallo,
Zitat:

Zitat von SebE
Ich hab herausgefunden, dass es nicht nur bei ToolButtons passiert, sondern bei allen neuen Objekte, die nicht schon vorhanden sind.

"Draufgezogen" heißt natürlich Rechtsklick -> "Neuer Schalter".

Ich weiß, dass es das richtige Objekt ist, da "TToolButton(Sender).Enabled := false" funktioniert.

so sicher ist das Wissen nicht, auch das (man mag es nicht glauben)
Delphi-Quellcode:
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  TLabel(Sender).Enabled := False;
  ShowMessage(Sender.ClassName);
end;
funktioniert ohne Exception. Beide haben eine Eigenschaft Enabled und daher funktioniert das.

hoika 12. Jan 2009 17:50

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Hallo,

Delphi-Quellcode:
procedure TfmMain.ToolButton1Click(Sender: TObject);
begin
  ToolButton1.Enabled := true
end;
Wie kannst du auf ToolButton1 klicken,
und dann den gleichen Toolbutton enablen.
Dann muss er ja vorher disabled gewesen sein.

Lösch mal im Object-Inspector das OnClick-Ereignis die Zeile raus.

Vielleicht hast du ja ToolButton1 kopiert incl. dem OnClick Event.
Durch Löschen und erneutem Doppelklick wird ein neues OnClick erzeugt (ToolButton2OnClick z.B.)


Heiko

SebE 12. Jan 2009 18:26

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Zitat:

so sicher ist das Wissen nicht, auch das (man mag es nicht glauben)
Ich werd ja wohl noch erkennen, dass sich die Eigenschaft Enabled des besagten Buttons ändert!

Mein Problem:
Ich kann in meinem bestehenden Projekt keine NEUEN Objekte hinzufügen (egal ob TButton, TToolButton, oder ein Eintrag ins MainMenu).

Ich suche jemanden, der diesen Fehler schon kennt und wie man das Problem lösen kann.

Antworten wie:
Zitat:

Wie kannst du auf ToolButton1 klicken,
und dann den gleichen Toolbutton enablen.
, die mir meine Programmierkenntnisse in Frage stellen, helfen mir überhaupt nicht.

hoika 13. Jan 2009 04:55

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Hallo,

> Wie kannst du auf ToolButton1 klicken, <
> und dann den gleichen Toolbutton enablen. <

Das sollte kein Angriff auf deine Progtrammierkenntnsse sein.
Dieser Code kommt meistens vom Kopieren einer Komponente,
wobei das OnClick-Event natürlich mit kopiert wird.

Was mich nur gewundert hat, war, dass OnToolBar1Click aufgerufen wird,
und der gerade angeklickte Button aktiviert wird,
d.h. vorher war er deaktiviert, konnte aber trotzdem angeklickt werden.


So ...
Nun zum Problem ... ;)

Schau dir mal deine DFM-Datei an,
vergleiche Sie mit einem anderen Formular
und suche nach Auffälligkeiten.

Vielleicht ist dort ja was schiefgegangen.

Ansonsten solltest du mal sämtlichen Code auskommentieen,
vielleicht machst du ja irgendwas im Speicher der VCL kaputt -> FastMM4


Heiko

nuclearping 13. Jan 2009 05:01

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Das Ergebnis von ...

Delphi-Quellcode:
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  ShowMessage(Sender.ClassName);
end;
... wäre ja sicher mal ganz interessant. ;)

nahpets 13. Jan 2009 08:09

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Hallo,
Zitat:

Zitat von nuclearping
Das Ergebnis von ...

Delphi-Quellcode:
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
  ShowMessage(Sender.ClassName);
end;
... wäre ja sicher mal ganz interessant. ;)

bitte Teile uns mal dieses Ergebnis mit, ich weiß aus Erfahrung, dass da schonmal was schief geht, mein entsprechender Vorschlag kam nicht, weil ich an Deinen Fähigkeiten zweifle, sondern weil ich mir an ähnlichen Problemen schon 'nen Wolf gesucht habe.

Was eventuell helfen könnte:

Wenn die DFM als Text gespeichert ist:

In Delphi alle Projekte/Dateien schließen, so dass nur noch das reine Delphi geöffnet ist,
Delphi schließen,
Eine Sicherungskopie der DFM machen,
DFM-Datei in Notepad oder ähnlichem öffnen,
alles markieren und in die Zwischenablage kopieren,
neue Textdatei erstellen,
Zwischenablage dort hineinkopieren,
Speichern unter dem Namen der DFM,
Delphi öffnen,
Projekt öffnen,
prüfen, ob das Problem nun behoben ist.

Es kann schonmal passieren, dass in 'ner DFM irgendwelche Steuerzeichen sind, die man im Editor nicht sieht, die aber beim Kopieren über die Zwischenablage "verschwinden". Habe zugegebenermaßen keine Ahnung, was da dann wirklich passiert.

SebE 13. Jan 2009 11:11

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Danke für eure Vorschläge...das Mit dem Editor klingt einleuchtend (leider hat's nicht geholfen).
Achso:
Delphi-Quellcode:
ShowMessage(Sender.ClassName);
ergibt "TToolBar"
Edit: ergibt "TToolButton"

Delphi-Quellcode:
showmessage(toolbutton1.ClassName)
funktioniert ja nicht

EDIT: ES FUNKTIONIERT!!!

Da der Button das letzte Objekt ist, was hinzugefügt wurde, kommt er natürlich ans Ende der Deklarationen...aus Spaß zum Vorletzten Objekt gemacht (um eine Zeile nach oben kopiert) ==> Es läuft.

Aber warum das???
(ihr könnt jetzt an meinen Programmier-Kenntnissen zweifeln :wink: )

Sherlock 13. Jan 2009 11:22

Re: Zugriffsverletzung durch neues Formular-Objekt
 
Hat das mit den Umlauten Delphi gemacht? Oder warst du das?
Delphi-Quellcode:
    object btOeffnen: TToolButton
      Left = 23
      Top = 0
      Hint = 'Datei '#246'ffnen...'
      Caption = #214'&ffnen'
      ImageIndex = 1
      OnClick = miOeffnenClick
    end
Edit: Mein D7 macht sowas nicht.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 Uhr.
Seite 3 von 4     123 4      

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