Einzelnen Beitrag anzeigen

TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#1

EOutOfResources: 'Fehler bei Einfügen von RichEdit -Zeile'

  Alt 31. Okt 2005, 11:11
Hi,

ich habe hier mal eine solche EOutOfResources-Exception, welche imo durch einen RichEdit-internen Fehler verursacht wird, reduplizierbar gemacht. Was mich daran jetzt u.a. interessieren würde ist, ob diese Exception mittels der folgenden Proc auch überall (also auf jedem PC) erzeugbar ist oder ob sich deren Auftauchen event. auch irgendwie noch etwas system- bzw. umgebungsabhängig verhält.


Hier also der Exception-Erzeugungs-Code (nötig dazu: 1*RichEdit, 1*Button, 2*Labels):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var I : integer;
    AStr : String;
begin
  RichEdit1.Perform(EM_SetLimitText,$7ffffffe,0); // ist aber unnötig, da Text < 64KB

  with RichEdit1 do begin
    RichEdit1.Clear;
    AStr := '---------------------';
    RichEdit1.Lines.Add(AStr + '--------------');
    for I := 1 to 2440 do RichEdit1.Lines.Add(AStr);


    Lines.Insert(0,'on: ' + '00:00:00 ');
    Lines.Insert(2,'on: ' + DateToStr(Now) + ' 00:00');
    Lines.Insert(3,'on: ' + DateToStr(Now) + ' 24:00 00:00:00');


    SelStart := Perform(EM_LINEINDEX,3,0) + 37; // = Position des '00' in Zeile3
    SelLength := 2;
    SelText := '24'; // Austausch der ersten '00' durch ein '24'


    Label1.Caption := 'Chars = ' + IntToStr(Length(Lines.Text));
    Label2.Caption := 'Lines = ' + IntToStr(Lines.Count);
    Lines.Add('bla bla'); // <=== hier wird die Exception ausgelöst
  end;
end;

Im angehängten Bild befindet sich noch ein kleiner Screen-Shot vom Programm-Output für denjenigen Fall, bei dem die letzte Lines-Add()-Zeile im Code weggelassen wird (also z.B. mit Comment-Slashes davor). Dann tritt zwar keine Exception mehr auf, aber das dann angezeigte Endergebnis ist fehlermäßig auch ziemlich lustig.


Event. checken ja ein paar von euch mal kurz, ob diese Exception auf eurem Rechner ebenfalls eintritt. Auf meinem PC ist der Fehler jedenfalls beliebig wiederholbar. Und da der Code in allen Teilen eigentlich auch mehr oder weniger üblich ist, sieht das Ganze meines Erachtens also irgendwie schon nach einer echten Fehlfunktion des RichEdit-Controls aus. Eine, die dann natürlich auch immer und überall mal auf einen lauern könnte ...und wodurch das RichEdit doch auch eigentlich schon irgendwie unbrauchbar würde, oder?


Oder irre ich da etwa irgendwo??? Ansonsten bräuchte man für Progs, die man auch irgendwie mal etwas weitergeben möchte, dann doch wohl ein alternatives (fehlerloses) Text-Control. Eines, das zum RichEdit zwar möglichst kompatibel ist (zwecks einfachem Austausch in bisherigen Progs), welches aber auch wieder nicht davon abgeleitet sein sollte?


Was ich nicht brauche sind Tipps, mit denen ich den Error nur vordergründig etwas "wegdrücken" kann. Interessant wäre aber, was man gegen eine solche Fehlermöglichkeit prinzipiell tun könnte, um sie mit Sicherheit auszuschließen.


Thx im Voraus.


PS. Oder sollte man die Exception event. immer mit der Meldung abfangen: "Sorry, kleine Fehlfunktion des RichEdit-Controls, die Schuld dafür suchen Sie bitte bei der Firma Micro-Soft" ?
Miniaturansicht angehängter Grafiken
eoutofresourceerror_575.jpg  
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat