Autor Beitrag
Kaspar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Fr 30.12.05 22:18 
Hallo zusammen

Ja, ich bins schon wieder, tut mir leid. :-(
Also ich habe ein Formular, mit 5 Buttons, diese sind mit Folgender funktion versehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure THauptfenster.BTN_Button1(Sender: TObject);
begin
MainFrame.Free;
MainFrame := TFRM_Main_Frame1.Create(nil);
MainFrame.Parent := MainPanel;
end;


Nun wird ja, ein Frame erzeugt, dies funktioniert auch tadellos.
Nun habe ich im Frame1 einen Button mit folgendem Code:

ausblenden Delphi-Quelltext
1:
2:
3:
MainFrame.Free;
MainFrame := TFRM_Detail_Frame.Create(nil);
MainFrame.Parent := Hauptfenster.MainPanel;


So wird ein neuer Frame geladen, dies Funktioniert auch tadellos.
Wenn ich jedoch im Frame "FRM_Detail_Frame" mehr als 1 Label platziere, bekomme ich folgende Meldung:

"Im Projekt Projekt2.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 004324B8 in Modul 'Projekt2.exe'. Lesen von Adresse 0000005B' aufgetreten.

Diese Meldung kommt jedoch nicht sofort, sie kommt wennn ich in Folgender Reienfolge die Buttons benutze:

Button1 im "Hauptfenster" dann im "Main_Frame1" auf den Button klicke, nun wieder auf den Button1 im "Hauptfenster" und erneut auf den Button im "Main_Frame1".
Das merkwürdige dabei ist, dass der Fehler nur kommt wenn im Frame "FRM_Detail_Frame" mehr als ein Objekt (Label etc.) plaziert ist.

Sooo ich hoffe, dass ich mein Problem einigermassen verständlich erklärt habe.

Es wäre wirklich suuuper nett, wenn ihr mir nocheinmal helfen würdet, weiss einfach nicht wo der Fehler liegt.


Gruss Kaspar

Moderiert von user profile iconGausi: Beitragsformatierung überarbeitet.
0xCC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Mo 09.01.06 01:06 
- einen breakpoint auf form.create oder show setzen (code, der beim start ausgeführt wird)
- projekt starten
- strg-alt-c drücken (cpu-fenster)
- rechtsklick auf die asm-statements (grosser bereich links oben)
- "Zu Adresse gehen" wählen
- $004324B8 in die box tippen und enter drücken
- du siehst anschliessend in dem fenster, bei welcher zeile der fehler auftritt.
Kaspar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 09.01.06 17:12 
Hallo,

Vielen Dank für deine Antwort!
Also 2 Fragen:

Wie setzt man einen Breakpoint?
Und wenn ich ctrl+alt+c drücke, passiert nichts. Also es öffnet sich kein CPU Fenster.

Ich würde mich wirklich rieeesig freuen, wenn Ihr mir weiterhelfen würdet, auch wenn ich mich dumm anstelle :)

Gruss Kaspar
0xCC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Mo 09.01.06 17:21 
wenn du links neben der zeilennummer im code hinklickst gibts nen roten punkt, auch genannt breakpoint.
delphi bleibt dann an der zeile stehen, wenn die codestelle erreicht ist.
sobald du im debug-modus bist, kannst du in delphi die tastenkombination für das cpu-fenster betätigen.

falls du keinen code im form1.oncreate hast mach da sowas wie form1.caption := 'test';
auf die zeile machst du den breakpoint dann kommst du auf jeden fall in den debugmodus
Kaspar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 09.01.06 17:44 
Hallo,

Nochmals Danke für deine Hilfe!
Also den Haltepunkt, habe ich gesetzt doch ich bekomme das cpu fenster einfach nicht auf.
Kann es sein, dass man da bei Delphi etwas einstellen muss`? (Habe Delphi 2005)
Ich habe mal die EXE als ZIP gepackt angehängt, vielleicht hilft es ja weiter beim helfen. :)
Wenn man nun auf "Baumeister" und dann auf "Bank" klickt kommt der Fehler.
Hoffe Ihr habt ein bisschen geduld mit mir. Ist wirklich wichtig, und ich komme einfach nicht weiter :(
Einloggen, um Attachments anzusehen!
0xCC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Mo 09.01.06 18:02 
das cpu-fenster geht nur auf wenn du einen BP erreicht hast (nach der ausführung)

probieren wirs mal anders:
klicke auf ansicht - units
dann nen doppelklick auf project2

da drin steht sowas wie application.showmainform
da drauf nen breakpoint, und dann starten

Delphi ist dann angehalten und kommt in den vordergrund dann kasnnst den shortcut drücken, alternativ unter
Ansicht->Debug-Fenster->CPU
Kaspar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mo 09.01.06 19:49 
Okay habe ich gemacht, nun siehts so aus: (siehe anhang)
Und nun? Was muss ich nun tun?
Bitte entschuldige mein unwisse :)
Einloggen, um Attachments anzusehen!
0xCC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Mo 09.01.06 20:28 
in der zeile mit call dword ptr musst du noch ein bischen nach oben scrollen (pfeiltasten), danach sollte dir die zeilennummer mit dem fehler angezeigt werden, ähnlich wie weiter unten bei dem TControl.WMRButtonUp.
wichtig ist natürlich, dass sich die adresse mit dem fehler mittlerweile nicht geändert hat (etwa durch zusätzlich eingebauten code), wonach es im moment aussieht.

ansonsten gehst du halt zu der adresse der aktuellen Fehlermeldung.
Kaspar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: Mi 11.01.06 17:13 
Hallo,

Also ich krieg das einfach nicht hin.
Habe jetzt nochmals komplett neu begonnen, aber sobald ich zuviele objekte habe, gehts nicht mehr. :(
Ich hänge jetzt mal das gesamte Projekt als ZIP gepackt an. Wäre wirklich genial, wenn sich das jemand mal kurz ansehen würde. :)
Oder giebts vielleicht eine andere möglichkeit, ausser mit Frames, das zu machen (siehe exe Projekt oben) ?
Ich freue mich über jeden Tipp!

Gruss Kaspar
Einloggen, um Attachments anzusehen!
0xCC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: Mi 11.01.06 19:09 
was du da machst scheint mir recht umständlich, es reicht alle frames 1x zu erzeugen und dann einfach die nicht gebrauchten zu verstecken:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
uses Main, GEB_Bank;
 var    bankFrame: TFrame;
{$R *.dfm}

procedure TFRM_Gebaeude.BTN_BankClick(Sender: TObject);
begin
mainframe.Hide;
bankFrame := TFRM_Bank.Create(nil);
bankFrame.Parent := Hauptfenster.MainPanel;
end;
Kaspar Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42



BeitragVerfasst: So 15.01.06 17:45 
Hallo,

Bitte entschuldige, dass ich erst jetzt Antworte, hatte gerade ein bisschen Stress.
Also vielen Dank erstmal für deine Hilfe! Habe es jetzt so gemacht, also mit .hide und .show.
Nun habe ich noch ein kleines Problem.
Wenn ich in einem Form namens "Form1" ein Panel habe namens "Panel1" darin ein Frame namens "Frame1", da drauf ein Button namens "Button1". Nun will ich beim Button1 klick das Panel1 ausblenden.
Doch wenn ich mache:

Panel1.Hide;

oder

Form1.Panel1.Hide;

Bekomme ich wieder ein Zugriffsfehler.
Was mache ich falsch?
Danke im Voraus! :)

Gruss Kaspar
0xCC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 150



BeitragVerfasst: So 15.01.06 18:19 
ich vermute mal das liegt daran dass der button auf dem panel ist das du verstecken willst

probier mal nen timer einzubauen, der das panel hidet und dann timer.enabled auf false stellt,
wenn man den button anklickt wird der timer enabled