Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#10

AW: StringReplace verursacht AV

  Alt 10. Okt 2016, 11:22
Kann es sein das StringReplace intern einen Fehler verursacht.
Also die Funktion selbst?

Folgendes Szenario.

CTRL_STATE = (Normal, Focus, Down, Disabled);
TReplaceFlags = set of (rfReplaceAll, rfIgnoreCase);

CTRL_STATE = 0..3
TReplaceFlags = 0..1

Ich erstelle mir jetzt einen ImageBuffer.

Delphi-Quellcode:
  SetLength(TmpHdc, 3);
  SetLength(hBmp, 3);
  SetLength(hBmpOld, 3);

  Wnd := GetDesktopWindow;
  DC := GetWindowDC(Wnd);

  for IntI := 0 to 3 do
  begin
0..3 ist das jeweilige Bitmap im ImageStrip. (Ich hoffe ihr wist was gemeint ist.)
0 wäre dann normal
1 Focus usw..

Eigentlich korrekt.

Aber wenn ich nun das Programm starte bekomme ich in der Zeile
  Caption := StringReplace(Caption, '&', '', [rfReplaceAll]);

einen AV das seltsame ist in einer ganz anderen Unit die eigentlich nichts mit dieser zu tun hat wo der ImageBuffer erstellt wird.
Die Procedure für den Buffer ist privat deklariert in einer eigenen Classe außerhalb da wo StringReplace den Fehler verursacht.

Ändere ich nun die länge also erhöhe sie mit 1
Delphi-Quellcode:
SetLength(TmpHdc, 4);
SetLength(hBmp, 4);
SetLength(hBmpOld, 4);
Ist das Problem verschwunden.. Warum?
Was hat StringReplace mit der Dimension meines Array zu tun das eigentlich korrekt sein sollte.
Ich habe ja keine 5 sondern nur 4 Bilder aneinanderhängend im ImageStrip.
also 0..3

Also! Was hat StringReplace mit der Dimension meines Array zu tun? Das auch noch Privat in einer ganz anderen Classe definiert ist.

gruss
  Mit Zitat antworten Zitat