Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 23.09.08 15:08 
HI,

ich hab seit gestern Nacht n ganz seltsames Problem. Ich erstell grad n 3D-Chat und hab Probleme bei meiner Sprechblase. Wenn ich die so erstell:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
constructor TSpeechBubble.Create(FontContextID: tsContextID; FontFileName: String; FontWidth: Integer; TextColor: TVector4f; Texture: TglBitmap2D);
var i: Integer;
begin
  inherited Create;

  fFontFileName  := FontFileName;
  fFontWidth     := FontWidth;
  fSpeechBubble  := Texture;

  fH := 0;
  fW := 0;
  fMaxWidth  := 3;
  fMaxHeight := 5;
  fShowTime := 10000;
  fTime     := 10000;
  fFirstRun := True;

  for i := 0 to 3 do fTextColor[i] := TextColor[i];

  tsContextBind(FontContextID);

  tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL); CheckError;
  tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI); CheckError;
  tsFontCreateCreator(pAnsiChar(fFontFileName), fFontWidth, TS_STYLE_BOLD, TS_DEFAULT, TS_DEFAULT, @fFontID); CheckError;
  tsPostAddShadow4f(1,0,0,1,1,1,0);

  TexRect[0].Top :=      1; TexRect[0].Bottom :=   0.75; TexRect[0].Left :=         0; TexRect[0].Right :=      0.25;
  TexRect[1].Top :=      1; TexRect[1].Bottom :=   0.75; TexRect[1].Left :=      0.25; TexRect[1].Right :=      0.75;
  TexRect[2].Top :=      1; TexRect[2].Bottom :=   0.75; TexRect[2].Left :=      0.75; TexRect[2].Right :=         1;

  TexRect[3].Top :=   0.75; TexRect[3].Bottom := 0.5625; TexRect[3].Left :=         0; TexRect[3].Right :=      0.25;
  TexRect[4].Top :=    0.5; TexRect[4].Bottom :=    0.5; TexRect[4].Left :=       0.5; TexRect[4].Right :=       0.5;
  TexRect[5].Top :=   0.75; TexRect[5].Bottom := 0.5625; TexRect[5].Left :=      0.75; TexRect[5].Right :=         1;

  TexRect[6].Top := 0.5625; TexRect[6].Bottom :=      0; TexRect[6].Left :=         0; TexRect[6].Right :=      0.25;
  TexRect[7].Top := 0.5625; TexRect[7].Bottom :=      0; TexRect[7].Left :=      0.25; TexRect[7].Right := 0.3515625;
  TexRect[8].Top := 0.5625; TexRect[8].Bottom :=      0; TexRect[8].Left := 0.3515625; TexRect[8].Right :=         1;
end;

dann ist fShowTime = 1065353216.
Wenn ich die Zuweisung ganz ans ende des Constructors schreibe, dann gehts?!

Und ich hab nochwas seltsames entdeckt:
Um den Text mit meiner Sprechblase ausgeben zu lassen hab ich ne eigene Prozedur geschrieben, in der weder fTime, noch fShowTime benutz werden. So ruf ich die Prozedur auf:
ausblenden Delphi-Quelltext
1:
if fTime < fShowTime then TextOut(fText); // für fShowTime-Sekunden anzeigen					

Und trotzdem wird kein Text (nur die leer Sprechblase) ausgegeben, wenn die Zuweisung in Create korrekt ist, also wenn fShowTime = 10000 ist, funktioniert zwar die ausgabe, aber der Text wird nich angezeigt. Und wenn fShowTime nich 10000 is, dann wird alles korrekt ausgegeben, aber die Sprechblase wird nich wieder ausgeblendet.
Könnt ihr mein Problem erkennen, oder hab ich das zu verwirrent geschrieben? (bin grad tot müde^^)
Wäre nett wenn jmd n Vorschlag hat, bin am Ende mit meinem Latein.

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 23.09.08 15:17 
<Kristallkugel anwirf> scheint, dass Du ein paar grobe Initialisierungprobleme hast oder Du deine Variablen übschreibst, ach ja, zeile 382, spalte 18
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 23.09.08 15:27 
HI,

ich weiß das ich Initialisierungsprobleme hab, deshalb hab ich ja das Thema geschrieben! Ich versteh bloß nich, dass die Variable die richtigen Werte enthält, wenn ich sie ans ende des Creators schreib. Und ich hab auch schon durchdebuggt und die Zeile fTime := 10000 und fShowTime := 10000 wird auf alle fälle abgearbeitet!

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Di 23.09.08 15:39 
was sagt dir denn der Debugger, was in der Variable drin steht, wenn die Zeile ausgeführt wird?

Und in welcher Zeile ändert sich der Wert wieder?

Hm, ich weiß nicht genau, ob man das direkt zu sehen bekommen kann bei D7...

_________________
1405006117752879898543142606244511569936384000000000.
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 23.09.08 15:47 
Also ich wüsst jetzt auch ncih wie das gehen soll^^
aber ich hab mir die Variablen nach der zuweisung mal als MessageBox ausgeben lassen.
direkt danach haben sie die korrekten erte, und am ende wieder falsch...
ich guck dann nochma durch. muss erstma los...

danke schonma für die hilfe!

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Di 23.09.08 16:38 
doch das geht auch in Delphi 7 im Debugger, da bin ich mir relativ sicher.
Man kann so einen Watch-Ausdruck auf die Variable legen.

Aber im Debugger müsstest du doch eigentlich sehen, wann sich der Inhalt ändert, wenn du den Code zeilenweise durchgehst...

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 23.09.08 17:39 
HI,

hab mal durchprobiert: nach for i := 0 to 3 do fTextColor[i] := TextColor[i]; is fShowTime nich mehr 10000.
Und nochwas neben bei: wo find ich den richtigen debuger, hab das bis jetzt immer nur mit "Einzellne Anweisung" durchdebuggt, und mir die Variablen als Message ausgeben lassen :oops:

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 23.09.08 18:40 
Ansicht-->Debug-Fenster-->Lokale Variablen
oder (bei mir) STRG+ALT+L
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 23.09.08 18:52 
alternativ z.b. debug informationen in datei oder, memo, oder... ausgeben lassen.

wenn ich mich recht erinnere, läuft das mit den watchpoints seit TP4

da ich immer noch meiner kristallkugel verlegt hab, musst schon selbst den debugger quälen...
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 23.09.08 22:08 
user profile iconBoldar hat folgendes geschrieben:
Ansicht-->Debug-Fenster-->Lokale Variablen

gibts bei mir net...

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
SvenAbeln
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Mi 24.09.08 01:21 
user profile iconBergmann89 hat folgendes geschrieben:
user profile iconBoldar hat folgendes geschrieben:
Ansicht-->Debug-Fenster-->Lokale Variablen

gibts bei mir net...


Die Delphi 7 Personal war gerade beim Debugger etwas eingeschränkt.
Aber Delphi bietet noch weitere Möglichkeiten den Wert einer Variabel anzuzeigen.

1. Mauszeiger über die Variable, es öffnet sich ein Hint mit dem Wert. (Fehlt glaube ich auch in D7 Personal)
2. Cursor über Variable und Strg + F5, Variable wird ins Fenster "Überwachte Ausdrücke" eingetragen.
3. Cursor über Variable und Strg + F7, "Auswerten/Ändern". Wert wird angezeigt und kann verändert werden.

Hiermit kann man beim schrittweise debuggen immer die Werte überprüfen, ohne exta Messages auszugeben.

Also mal Haltepunkte setzten und dann Schritt für Schritt nachvollziehen wann der Wert wieder geändert wird.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 24.09.08 03:01 
user profile iconBergmann89 hat folgendes geschrieben:
hab mal durchprobiert: nach for i := 0 to 3 do fTextColor[i] := TextColor[i]; is fShowTime nich mehr 10000.
Das sieht dann doch sehr danach aus als würdest du da irgendwo Speicher überschreiben, der gar nicht der richtige ist. Zum Beispiel passiert sowas, wenn du auf ein Element eines dynamischen Arrays zugreifst, dass es gar nicht gibt, weil der benutzte Index zu groß ist.
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mi 24.09.08 16:46 
hm,
das einzige was mir jetzt dazu einfällt is: ich hab ein dyn. Array (wo die Player "abgelegt" sind), und das is z.B. 5 Elemente lang. und Element 1 und 2 sind aber nil. Aber vor jedem zugriff auf das Array frag ich mit Assigned(fPlayerList.Player[X]); ab, ob das Element vorhanden is? Könnte dass das Problem verursachen?

Ich hab jetzt mal die Unit die sich mit den Sprechblasen beschäftigt neu geschrieben (war nich viel, ne halbe Stunde Arbeit) und seit dem hab ich keine Probleme mehr gehabt.

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^