![]() |
Hilfe!!! Delphi 6/7 Compiler Fehler???
Hallo,
im folgenden ein einfacher und kurzer Code, der bei mir sowohl unter D6 als auch unter D7 eine Access Violation produziert, wenn man den KillButton drückt:
Delphi-Quellcode:
Ich mache doch nichts böses, oder?!?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TForm1 = class(TForm) KillButton: TButton; MainMenu1: TMainMenu; Menu: TMenuItem; SubMenu: TMenuItem; procedure KillButtonClick(Sender: TObject); procedure FormResize(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.KillButtonClick(Sender: TObject); begin SubMenu.Visible:=false; close; end; procedure TForm1.FormResize(Sender: TObject); begin SubMenu.Visible:=true; end; end. Warum dann die Access Violation in der Delphi-Unit Menus in TMenu.SetWindowHandle??? Es müssen übrigens zwei MenuItems sein, mit einem allein tritt der Fehler nicht auf. Sie müssen nicht geschachtelt sein, aber Menu muss vor Submenu kommen. |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Wie sieht denn die DFM aus?
Grundsätzlich ist dieser Code erstmal OK und vorallem für Delphi 7 kann ich solche Fehler nicht bestätigen. Die Reihenfolge von SubMenu und Menü sollten auch keine Rolle spielen. PS: ![]() |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zweite Frage
warum kein Delphi 10.2 Starter? |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Delphi-Quellcode:
object Form1: TForm1
Left = -1469 Top = 233 Width = 589 Height = 291 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -13 Font.Name = 'MS Sans Serif' Font.Style = [] Menu = MainMenu1 OldCreateOrder = False OnResize = FormResize PixelsPerInch = 120 TextHeight = 16 object KillButton: TButton Left = 56 Top = 32 Width = 75 Height = 25 Caption = 'KillButton' TabOrder = 0 OnClick = KillButtonClick end object MainMenu1: TMainMenu Top = 32 object Menu1: TMenuItem Caption = 'Menu' end object SubMenu: TMenuItem Caption = 'SubMenu' end end end Zitat:
Ah, ich sehe das gibts kostenlos. Bisher war ich mit D7 glücklich. Kann das Problem jemand reproduzieren oder tritt das nur bei mir auf? |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Wenn das nun so ein kurzes Testprogramm ist, könntest Du doch vielleicht das komplette Projekt hier hochladen. Dann brauchen wir das nicht per Copy&Paste neu anzulegen
|
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Delphi 7, Delphi 8, Delphi 9, Delphi 10. So ist nicht ;) |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Zum Thema: Die DFM passt nicht zur Unit. In der DFM gibt es u. a.
Delphi-Quellcode:
in der Unit aber
object MainMenu1: TMainMenu
Top = 32 object Menu1: TMenuItem // in der Unit heißt's nur Menu Caption = 'Menu' end object SubMenu: TMenuItem Caption = 'SubMenu' end
Delphi-Quellcode:
Da ist irgendwas kaputtgegangen, bei mir meckert der Kompiler das an.
MainMenu1: TMainMenu;
Menu: TMenuItem; // nicht Menu1??? SubMenu: TMenuItem; |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
|
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
|
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Mit Delphi6 bzw 7 war ich bisher glücklich. Das ist schnell, bisher stabil und verfügbar. Und ich kanns bedienen. Ich bin übrigens beileibe nicht der einzige, der D6 bzw. D7 benutzt. Das gabs damals kostenlos als Zeitungsbeilage. P.S. Ein Anfänger hätte den Fehler sicher nicht in 10MB Quellcode mit Multithreading und dynamischen dlls isolieren können! |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
|
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Dafür gibt es eine Chance, dass die Bugs irgendwann behoben werden oder sogar schon behoben wurden, was bei alten Delphis nicht der Fall ist. :zwinker:
Zitat:
Strg+C in Delphi-Dialogen und dann hier Strg+V funktioniert gut. Delphi kopiert bei Dialogen den Inhalt als Text in die Zwischenablage. Zugriffsverletzung bei Adresse 00000xx -> irgendwas ist NIL (0 + Offset innerhalb des Objekts) Zugriffsverletzung bei Adresse xxxxxxx -> Zeiger ist womöglich ungültig Bei Ersterem hier
Delphi-Quellcode:
nachsehn ob die variable "SubMenu" NIL ist, was darauf deuten könnte, dass es dieses Objekt in der DFM nicht gibt, mit genau diesem Namen (Groß-/Kleinschreibung ist egal).
SubMenu.Visible:=false;
Da kein Anfänger, noch 'ne Info: TComponent schreibt in seinen Owner seine Referenz rein, wenn es dort ein Published-Feld mit seinem Namen findet. > Beim Erstellen (zuweisen des Owner), bei Namensänderung und beim Freigeben. Der Typ dieser Felder muß passen, da diese "uralten" Funktionen nicht auf den Typ achten, also wäre dieses Feld nur ein Byte, statt einem TObjekt, dann gäbe es einen Bufferoverflow. |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Es ist nachwievor extrem selten, das die IDE oder der Compiler von Delphi 7 rumzicken. Meist sind das dann Fehler vom Anwender. Bitte sei so gut, und akzeptiere, dass andere Programmierer andere Delphiversionen nutzen als Du. Delphi 7 war bisher wohl eine der besten Entwicklungsumgebungen. Es funktioniert einfach problemlos. Abgesehen davon kann man aus dem Alter der genutzten Delphiversion nicht auf den "Befähigungsstatus" des Nutzers schließen. Ja, wir alten Säcke sind mit 'ner guten Entwicklungsumgebung zufrieden, auch wenn sie, so wie wir, schon etwas betagt ist. @himitsu Die Qualität der Fehlerbehebung kann man ja momentan in 'nem anderen Thread "genüsslich" verfolgen ;-) (ironisch gemeint) Zum Thema: Nach dem Close wird nochmal Formresize aufgerufen. Dort erfolgt ein Zugriff auf SubMenu, dass zu diesem Zeitpunkt bereits nicht mehr existiert. |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Liste der Anhänge anzeigen (Anzahl: 1)
P.P.S.
Ups, beim Beispiel liegt die MainForm noch auf dem zweiten Bildschirm, so dass man sie mit einem Bildschirm allein nicht sieht. Anbei das Beispiel mit der Form auf dem Hauptbildschirm. |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
![]() und siehe der letzte Absatz hier in Kommentar #12. |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Also: Resize wird auch noch aufgerufen, wenn schon Teile des Formulars irgendwo im Nirwana entsorgt wurden.
Delphi-Quellcode:
Wenn das, was im OnResize steht, benötigt wird, das in eine eigene Prozedure packen und diese dann im OnResize aufrufen.
procedure TForm1.KillButtonClick(Sender: TObject);
begin SubMenu.Visible := false; Self.OnResize := Nil; Close; end; Wobei: Sollten im Resize tatsächlich Routinen sein, die zwingend beim Programmende aufgerufen werden müssen, erlaube ich mir die Frage, ob sie dann im Resize wirklich richtig aufgehoben sind. |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Zitat:
Zitat:
Lazarus/FPC macht den Quatsch übrigens nicht. Derselbe Code in Lazarus läuft anstandslos. Grund: Lazarus löst bei Programmende keinen OnResize aus, hab ich gerade getestet. Leider kann man während der Compilierung mit Lazarus Kaffee trinken gehen. |
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Wenn man im OnResize auf Assigned für Menu1, SubMenu oder MainMenu1 abfragt, so scheint es sie alle noch zu geben. Da scheinen aber Anschein und Realität voneinander abzuweichen.
Dem Formular einfach noch ein OnClose-Ereignis zuweisen und dort das OnResize auf Nil setzen. Das dürft dann auch mit Lazarus funktionieren und man muss nicht vor jedem Close im Programm (sofern es mehrere geben sollte) ein
Delphi-Quellcode:
reinpacken.
Self.OnResize := Nil;
|
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Oder man löst es sauber... ;-)
Delphi-Quellcode:
// EDIT:
procedure TForm1.FormResize(Sender: TObject);
begin if not (csDestroying in ComponentState) then SubMenu.Visible := true; end; Zitat:
|
AW: Hilfe!!! Delphi 6/7 Compiler Fehler???
Zitat:
Vielleicht programmiere ich ja nur einfach zu wenig "exotisch", so dass es weitgehend problemlos funktioniert 8-) Ok, bei komplexen Projekten, mit vielen eingebundenen Units, wie z. B. JVCL, Pascalscript, SynEdit, ..., mag der Debugger mir grundsätzlich keine Variabelinhalte anzeigen und die Auswahlbox für die Vervollständigung von Klassen liegt dann ab und an auchschonmal vollkommen "daneben" ... Das ist schon alles sehr ärgerlich. Und Änderungen an den Kompilerschaltern haben das keine "positive" Auswirkung. Aber im Großen und Ganzen bin ich nachwievor zufrieden :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr. |
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