| Autor |
Beitrag |
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: So 10.07.05 11:22
Ich bin hier grad echt am dumm gucken. Ich habe hier mehrere TSpeedButtons auf einer Toolbar2k und erzeuge sie zur Laufzeit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
|
btn := TSpeedButton.Create(tbMain);
btn.Glyph := TBitmap.Create;
/... Glyph erstellen oder aus Bilddatei laden
with btn do begin parent := tbMain; width := 26; height := 26; flat := true; numglyphs := 2; onclick := aOnClick; tag := Ord(aIsDynamic); end; |
So, das macht auch garkeine Probleme, alle Buttons haben einen korrekten normalen und ausgegrauten Zustand.
Das Problem liegt hier beim Ausgrauen bestimmter Knöpfe:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
|
for i:=0 to tbMain.ControlCount-1 do begin
try
if (tbMain.Controls[i].Tag=1) then tbMain.Controls[i].enabled := en;
except ShowMessage(tbMain.Controls[i].hint); end;
end; |
Hier bekomme ich bei manchen Knöpfen (immer die gleichen, aber nicht erkennbar, was an denen anders ist) eine
Access Violation, und zwar in der Datei buttons.pas bei
function TButtonGlyph.CreateButtonGlyph(State: TButtonState): Integer;
auch wenn ich dem Button überhaupt keinen Glyph zugewiesen habe.
Die betroffene Zeile im CPU-Window ist "mov ebx,[edx+eax*4+$0c]", was für mich auf die Zeile
"Result := FIndexs[State];" hinweist.
Eigentlich müsste doch mein ShowMessage immer angezeigt werden, wenn der Fehler auftritt, aber die Exception
scheint nur innerhalb der IDE aufzutauchen. Im Standalone-Betrieb des Programms funktioniert alles.
Zuletzt bearbeitet von Spaceguide am So 10.07.05 16:00, insgesamt 1-mal bearbeitet
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 10.07.05 11:58
Was sagt ein Blick in den Stack-Trace? Was meint der Single-Step?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Spaceguide 
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: So 10.07.05 13:10
Single Step zeigt nichts interessantes. Wie mache ich einen Stack Trace in Delphi?
Hab gerade entdeckt, dass der Bug verschwindet, wenn ich
Delphi-Quelltext 1:
| tbMain.Controls[i].enabled := en; |
durch
Delphi-Quelltext 1: 2: 3: 4:
| if en then tbMain.Controls[i].enabled := true else tbMain.Controls[i].enabled := false; |
ersetze! 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 10.07.05 14:21
Ansicht \ Debug-Fenster \ Aufruf-Stack ...
Das ist aber echt komisch ... Sowas hatte ich auch noch nicht ... 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: So 10.07.05 15:02
Hallo,
der Titel Deines Beitrages ist nicht aussagekräftigt genug. Man weiß nicht genau, um was es geht. Heisenbug ist eine Kategorisierung eines Fehlers, beschreibt diesen aber nicht. Bitte ändere ihn entsprechend!
Dies kannst Du tun, indem Du in Deinem ersten Beitrag auf "Edit" klickst und den Titel dort änderst.
Dazu hier auch noch der Auszug aus den Richtlinien:
| Richtlinien hat folgendes geschrieben: | 1.2 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist. Eine Pseudocodezeile oder die Nennung des Objektes, um welches es sich in dem Beitrag handelt, helfen da schon mehr weiter. Wenn Du beispielsweise wissen möchtest, wie es möglich ist, eine Integer-Variable in das String-Format zu konvertieren, würde ein Beitrag wie etwa "Integer zu String" oder "Integerkonvertierung" anderen Forenmitgliedern einen kurzen Überblick über die eigentliche Fragestellung verschaffen. So ist es möglich gezielter Lösungen für Probleme zu finden. Zudem solltest du immer daran denken: Der Fragesteller möchte etwas von den anderen Usern - nicht umgekehrt. |
Vielen Dank
Gruß,
Uwe
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 10.07.05 15:05
[offtopic]Uwe hat Recht, aber ich möchte anmerken, dass ich den Titel cool finde  [/offtopic]
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: So 10.07.05 15:12
@heisenbug: da hat wohl einer das letzte c't gelesen 
_________________ es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: So 10.07.05 15:14
Ich finde ihn auch ganz gut, aber er passt halt net
retnyg hat folgendes geschrieben: | @heisenbug: da hat wohl einer das letzte c't gelesen  |
Nicht nur einer, inzwishcen sinds schon 4 *g*
|
|
Spaceguide 
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: So 10.07.05 16:01
Kannte das Wort schon vorher, aber wer erklärt mir jetzt dieses Phänomen?
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 10.07.05 21:00
Dazu bräuchte ich ne Kopie des CPU-Fensters für die betroffene Zeilen. Vielleicht seh ich da, was den Fehler verursacht
(Zum Vergleich, was der Compiler da für'n Müll assembliert).
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Spaceguide 
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: So 10.07.05 21:54
Hier, wenn's bekommt.
Einloggen, um Attachments anzusehen!
|
|
|