Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010 (https://www.delphipraxis.net/140949-tstringaligngrid-andreas-hoerstemeier-delphi2009-oder-2010-a.html)

gullatrulla 29. Sep 2009 15:25


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

mkinzler 29. Sep 2009 15:58

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Hast du mal Testweise alle String durch AnsiString und Char durch AnsiChar ersetzt?

Hansa 29. Sep 2009 16:17

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
was wird denn dringend davon gebraucht ?

gullatrulla 29. Sep 2009 16:36

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:
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;
Ich habe die Zeilen wie folgt abgeändert...
Delphi-Quellcode:
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;
Dies funktioniert nun... aber leider sind buchstäblich dutzende andere Funktionen vorhanden
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]

Chris.R 29. Sep 2009 18:31

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:
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;
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.

Du müsstest also alle Vorkommen von PChar, PString und string durch PAnsiChar, PAnsiString und AnsiString ersetzen.

Oder du probierst folgendes:

Delphi-Quellcode:
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;
Allerdings weiß ich nicht was in der Funktion SetItemCell gemacht wird, kann also sein, das es trotzdem kracht,
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

himitsu 29. Sep 2009 19:20

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.

Chris.R 29. Sep 2009 20:03

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

himitsu 29. Sep 2009 20:11

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
NewStr hab ich ganz rausgenommen und laß Delphi die PString's verwalten :roll:

gullatrulla 29. Sep 2009 20:41

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Hallo himitsu

Ich probiers Morgen mal aus.
Herzlichen Dank für Deine super Arbeit.

Gruss
Roland

gullatrulla 30. Sep 2009 06:54

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 23:23 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz