![]() |
TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
Hi Delphi-Folks
Ich benutze seit Jahren die Komponente TStringAlignGrid von Andreas Hörstemeier. Leider wird diese Komponente laut Andreas nicht mehr weiterentwickelt. Die aktuelle Version ist aus dem Jahre 2001(!) und hat bis Delphi 2007 einwandfrei funktioniert. Nun überlege ich mir von Delphi 2007 auf Delphi 2010. Doch nun scheitere ich bei Delphi 2010 an der Kompilierung dieser Komponente. Es wären dutzende Projekte welche ich ändern müsste, wenn ich ein neues StringGrid mit ähnlichen Funktionen benutzen müsste. (z.B. TAdvStringGrid) Zudem... wenn ich mir die TAdvStringGrid von TMS anschaue wird mir schwarz vor Augen. Das Projekt wird um mehr als 1.5 MBbyte grösser nur wegen dieser Komponente. Ich brauche beileibe nicht alle diese Funktionen. Hat irgend jemand die Komponente TStringAlignGrid unter Delphi 2009 oder Delphi 2010 noch in Gebrauch? Herzlichen Dank zum voraus Roland |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Hast du mal Testweise alle String durch AnsiString und Char durch AnsiChar ersetzt?
|
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
was wird denn dringend davon gebraucht ?
|
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Vielleicht kurz vorab...
In der Komponentenentwicklung bin ich nicht sonderlich gut bewandert. Ich beschäftige mich grösstenteils mit Datenbankprogrammierung. Ich nehme an dass die Probleme vorallem mit der Einführung von Unicode in Delphi 2009 zu tun haben. Es sind z.Teil "veraltete" Befehle wie z.B NewString... siehe unten...
Delphi-Quellcode:
Ich habe die Zeilen wie folgt abgeändert...
procedure TStringAlignGrid.SetHintCell(ACol,ARow: longint; const Value: string);
var v:pstring; begin FSaveHint:=true; v:=NewStr(value); v:=SetItemCell(ACol,ARow, FHintCell, v); if v<>NIL then DisposeStr(v); end;
Delphi-Quellcode:
Dies funktioniert nun... aber leider sind buchstäblich dutzende andere Funktionen vorhanden
procedure TStringAlignGrid.SetHintCell(ACol,ARow: longint; const Value: string);
var v:pstring; begin FSaveHint:=true; v:=SetItemCell(ACol,ARow, FHintCell, PChar(v)); if v<>NIL then StrDispose(PChar(v)); end; welche ähnliche Probleme beinhalten. Ich habe es schon geschafft, dass ich die Komponente komplett kompilieren kann. Jedoch spätestens beim Einfügen der Komponente in eine Form hängt sich die IDE mit einer Zugriffsverletzung auf. Irgendwo scheine ich einen Fehler gemacht zu haben. Evtl. hat jemand die Komponente auf Delphi2009/Delphi2010 angehoben und würde mir die Source zur Verfügung stellen. Herzliche Grüsse Roland [edit=mkinzler]Delphi-Tags eingefügt Mfg, mkinzler[/edit] |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Hallo,
mit deiner Vermutung, dass es an der Unicode Unterstützung liegt, bist du ganz richtig.
Delphi-Quellcode:
Die Funktion kann nicht kompilieren, da NewStr als Rückgabe PAnsiChar hat und unter Delphi 2009 ist PChar, PString und string ein Unicode String, also inkompatibel.
procedure TStringAlignGrid.SetHintCell(ACol,ARow: longint; const Value: string);
var v:pstring; begin FSaveHint:=true; v:=NewStr(value); v:=SetItemCell(ACol,ARow, FHintCell, v); if v<>NIL then DisposeStr(v); end; Du müsstest also alle Vorkommen von PChar, PString und string durch PAnsiChar, PAnsiString und AnsiString ersetzen. Oder du probierst folgendes:
Delphi-Quellcode:
Allerdings weiß ich nicht was in der Funktion SetItemCell gemacht wird, kann also sein, das es trotzdem kracht,
procedure TStringAlignGrid.SetHintCell(ACol,ARow: longint; const Value: string);
var v:pstring; begin FSaveHint:=true; v:=SetItemCell(ACol,ARow, FHintCell, PChar(Value));// <- Value statt v als Parameter if v<>NIL then StrDispose(PChar(v)); end; weil z.B. mit festen Längen von Zeichen gerechnet wird (also 1 Byte pro Zeichen statt wie bei Unicode mit 2 Zeichen). Die Version mit dem Ersetzen von String durch AnsiString sollte auf jedenfall funktionieren. Solltest nur keine vergessen :wink: Ciao Chris |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Liste der Anhänge anzeigen (Anzahl: 1)
bin noch nicht ganz durch, aber bevor ich mich noch weiter beschäftige ... geht es denn so?
ab D2009 sollte es nun Unicode sein und davor Ansi ... wie bei String halt so üblich :angel: [edit] ach ja, die ganze Delphi 1-Unterstützung und vieles bis Delphi 3 ist nebenbei rausgeflogen ... nicht daß sich wer wundert. |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Hallo,
@himitsu: meinst du die Funktion NewStr?? Die gibt bei mir in Delphi 2009 PAnsiString zurück. Ciao Chris |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
NewStr hab ich ganz rausgenommen und laß Delphi die PString's verwalten :roll:
|
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Hallo himitsu
Ich probiers Morgen mal aus. Herzlichen Dank für Deine super Arbeit. Gruss Roland |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 od. 2010
Hallo himitsu
Habe es ausprobiert! - Kompilierung läuft ohne Fehlermeldung durch. - Komponente kann danach ebenfalls ohne Fehlermeldung auf das Formular gesetzt werden. ABER... sobald ein Doppelklick auf dem Grid durchgeführt wird erscheint wieder eine Zugriffsverletzung: -------------------------------------------------------------------- Zugriffsverletzung bei Adresse 50000D11E in Modul 'rtl140.bpl'. Schreiben von Adresse 00000000. -------------------------------------------------------------------- Herzliche Grüsse Roland Ps. Die Kompilierung erfolgte unter Delphi2010 Professional. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz