Delphi-PRAXiS

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.

Hansa 30. Sep 2009 08:05

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Wiederholung :

Zitat:

Zitat von Hansa
was wird denn dringend davon gebraucht ?

Nun, was ? Ich befürchte, dass der ganze Weg in die falsche Richtung geht.

gullatrulla 30. Sep 2009 10:25

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

Einfach gesagt brauche ich das ganze TStringAlignGrid. Es beinhaltet
die Funktionen wie CellFont, CellHint, SortColumn etc. Alles Funktionen,
welche ich in den letzten Jahren in vielen Projekten eingebaut habe.

Vor allem CellFont wäre mir wichtig. Es soll möglich sein, dass der
Benutzer selbst entscheiden kann welche Zellen er speziell formatieren möchte.
Ich sollte eine Funktion habe, bei welcher ich pro Zelle Wert wie Schriftgrösse,
Farbe, rechts-/Linksbündig etc. hiterlegen könnte.

Ich habe schon versuche, ein eigenes StringGrid zu programmieren.
Doch ich bin immer wieder gescheitert, da mir die notwendige Praxis und Erfahrung in der
Komponentenentwicklung fehlt.

Ein Umstieg auf eine andere Komponente welche ähnliche Funktionen bietet
ist sehr aufwendig. Und wie ich schon am Anfang gesagt habe, habe ich
keine Lust das jetzige TStringAlignGrid durch z.B. TADVStringGrid zu
ersetzen, welches mir meine Projekte künstlich aufbläst.

Gruss
Roland

NickelM 30. Sep 2009 10:43

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Hi gullatrulla
Ich hab mich in der letzen Zeit ein wenig mit Komponentenprogrammierung beschäftigt auch das DBGrid als beispiel verändert, das da eine DBComboBox drin ist oder Checkbox. (soll jetzt nicht angeberrich klingen :oops: ).
Wenn du mir mal per pn oder den link schickst dazu kann ich versuchen es umzusetzen. Hab Delphi 2009, hoffe nur das das dan nicht viel unterschied macht.

Nochwas: Das mit der Zugriffsverletzung hatte ich bei mir meistens wenn ein Pointer leer war oder wenn er den Pointer nicht finden konnte. Vermute mal liegt an irgendeinen Pointer, der nicht richtig zugewiesen wurde.

Gruß NickelM

himitsu 30. Sep 2009 10:59

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Zitat:

Zitat von NickelM
Nochwas: Das mit der Zugriffsverletzung hatte ich bei mir meistens wenn ein Pointer leer war oder wenn er den Pointer nicht finden konnte. Vermute mal liegt an irgendeinen Pointer, der nicht richtig zugewiesen wurde.

Diese Vermutung wird wohl richtig sein.

Hast du (gullatrulla) mal ein Beispielprogramm?
Ein Debuggen wäre ohne sowas etwas schwierig.

hanspeter 30. Sep 2009 12:31

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Zitat:

Zitat von gullatrulla
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.
Roland

Die Ursache für den Speicherzuwachs ist wohl eher bei D2010 zu suchen.
Unter D7 schlägt das ADVgrid bei mir mit 686 Kbyte zu Buche.
Im Verhältnis zu D7 haben bei mir fast alle Programme unter D2010 fast die dreifache Größe.

Gruß
Peter

mkinzler 30. Sep 2009 12:59

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Zitat:

Die Ursache für den Speicherzuwachs ist wohl eher bei D2010 zu suchen.
Unter D7 schlägt das ADVgrid bei mir mit 686 Kbyte zu Buche.
Im Verhältnis zu D7 haben bei mir fast alle Programme unter D2010 fast die dreifache Größe.
Weil: Unicode belegt doppelt so viel + erweiterte RTTI
Die Dateigröße sollte bei heutigen Speicherpreisen kein Problem mehr darstellen

himitsu 30. Sep 2009 13:36

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
also die ResourceStrings sollten sich da nicht vergrößern, da sie wohl schon seit Delphi2 als Unicode gespeichert werden :stupid:

gullatrulla 30. Sep 2009 15:09

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo himitsu

Ich habe eigentlich nur Deine Komponente unverändert kompiliert und
dann auf ein Formular gesetzt.

Die Zugriffsverletzung erscheint nicht während des Programmablaufs
sondern gleich innerhalb der IDE beim Doppelklick aus Grid.

Herzliche Grüsse
Roland


Ps. Die OriginalSource von Andreas Hörstemeier's TStringAlignGrid
habe ich als Attachment angehängt.

NickelM 30. Sep 2009 21:31

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Hm....bei mir kommt wegen der ah_tool datei fehler ohne ende LOL...
wegen variablen zeug..ne frage musstest du die auch ändern?

gullatrulla 1. Okt 2009 06:38

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein, die Datei ah_tool.pas musste ich nicht verändern.
Vermutlich liegt es an der Datei ah_def.inc bei welcher die
Versions-Checks für die Delphi Versionen gesetzt werden sollen.
Dies habe ich gemacht (für Delphi 2009 und Delphi 2010).

Ich lege als Attachment einmal die Version bei welche ich zur Zeit
versuchen zum laufen zu bringen.

Ich bin jetzt soweit, dass die Komponente fehlerfrei kompiliert.
Auch der Doppelklick innerhalb der IDE funktioniert.
(Mit dem Doppelklick wird der interne Editor der TStringAligngrid geöffnet.)

Wenn ich nun jedoch einen Wert in das Grid tippe und dann auf OK
klicke erhalte ich die Fehlermeldung.

Vielleicht sieht jemand von Euch das Problem.

Herzlichen Dank für Eure Hilfe
Roland

NickelM 3. Okt 2009 02:58

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Liste der Anhänge anzeigen (Anzahl: 1)
So ich hab jetzt mal ein paar dinge verändert.
Bei mir (Delphi 2009) kommen nun keine fehler mehr.
Hab nur die veränderten Dateien angehängt
Was mir nur aufgefallen ist, ist das jetzt beim Start der Anwendung die voreingestellten Strings nur teilweise angezeigt werden.
Ich wollte mal wissen ob das nun auch bei dir kommt.
Wenn ja glaub ich muss ich, damit es besser läuft, die Speicherung der virtuellen Zellen komplett ändern.
Das Prob war das PString und PChar zusammen gemischt waren. Dies funkt natürlich nicht.
PString ist nen Pointer auf nen String und PChar nen Pointer auf die einzelnen Chars, soviel ich weis.
Wenn das mit den Strings auch bei dir kommt, dan muss ich wohl ne eigene Klasse für die machen :mrgreen:

Hoffe ich konnte dir immerhin schonmal ein wenig helfen.
Wenns noch weitere Probs auser dies gibt, sag mir mal bescheid, durch was,wann und wo genau das passiert. Dann versuch ich mal das auch herauszufinden.

himitsu 3. Okt 2009 17:07

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von gullatrulla
Die Zugriffsverletzung erscheint nicht während des Programmablaufs
sondern gleich innerhalb der IDE beim Doppelklick aus Grid.

Also bis auf ein paar umgestellte Uses-Listen (Controls mußte z.B. weiter hinten eingefügt werden, da sonst noch Definitionen aus anderen Units verwendet wurden, welche verschoben wurden und wo der Compiler dann die Verwendung der "alten" Typen meckert)

Es sind jetzt praktisch alle Warnungen raus (bis auf eine bezüglich dem IN bei Char-Sets).

Ansonsten hab ich eigentlich nichts mehr verändert.
Und bei mir läßt es sich ebenfalls in D2009 ohne Exception einfügen :gruebel:

Zitat:

Zitat von gullatrulla
Ps. Die OriginalSource von Andreas Hörstemeier's TStringAlignGrid
habe ich als Attachment angehängt.

Die hatte ich mir schon persönlich von diesem geholt, aber es kann bestimmt nicht schaden diese hier mit zu haben ... wer weiß, wann er ganz aufhört und diese von seiner Seite runterlöscht :stupid:

NickelM 5. Okt 2009 07:21

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Liste der Anhänge anzeigen (Anzahl: 1)
So zur Zeit hab ich mal versucht auf eine ganz andere weise die Strings zu machen aber irgendwie macht er es nicht :wiejetzt:
Ich hab die zweite TList die erstellt wird für die Strings in eine TStringList geändert um das speichern mit den Strings zu vereinfachen.
Alle Funktionen habe ich nun die auf das zugreifen, kopiert und geändert (sozusagen eine 2te Prozedure jeweils gemacht)
Weil mit PChar gehts net als Pointer der Liste zu übergeben, dies führt zu anderen Texten bzw. andere Zeichen. Egal ob man übern Editor ändert oder compiliert und dan starten, steht was völlig anderes drin... :wiejetzt:

So...zurück zu meinen Versuch. Das mit den Stringlisten funkt schon aber nichts wird im Grid angezeigt :roll: .
Bin mit der Suche mehrmals alle Variablen FHintCell und FCell durchgegangen um alle Zuweisungen zuändern.
Wird aber trotzdem nicht angezeigt.
Vllt ist es ja eine Idee wie man es machen kann, vllt bekommst du (gullatrulla) es hin oder auch jemand anderes :mrgreen:
Bin mal weiter am suchen :wink:

gullatrulla 5. Okt 2009 16:27

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

Ich bin zur Zeit in meinen wohlverdienten Ferien.
Sobald ich wieder zu Hause bin teste ich Eure Anpassungen.

Herzliche Grüsse
Roland

gullatrulla 24. Nov 2009 09:17

Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Delphi-Folks

Die Komponente funktioniert nun unter Delphi 2010.
(soweit ich es erkennen kann)

Falls es jemand noch interessiert...
Im Anhang ist habe ich die Komponente angehängt.

Herzliche Grüsse
Roland

kurt 2. Dez 2010 07:49

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
Hallo,
ist das Thema noch aktuell ?
Hat einer in Delphi XE schon Anpassungen genmacht ?

Danke + Gruß Kurti

himitsu 2. Dez 2010 09:27

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
Wenn es unter 2009/2010 läuft, dann sollte es auch unter XE laufen.
Die meißten Probleme entstanden bei der Unicodeumstellung in Delphi 2009.

Hast du den Code aus Beitrag #25 mal ausprobiert
und wenn ja, welche Fehlermeldungen/Probleme sind denn aufgetaucht?
(ohne XE kann ich es ja schlecht selber ausprobieren)

kurt 2. Dez 2010 10:42

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
Danke für die schnelle Antwort.
... läuft leider eben nich ... Strings aus der dfm werden schon falsch ausgelesen ...denke mit UniCode (2 byte) denn es werden komplett falsche Zeiche angezeigt.
auch xxx.WriteString schreibt 'Unfug' in die dfm. Der Aufruf des Grideditor's schläg auch fehl mit nen RTL-Fehler.
Aus der Fehlermeldung schließe ich (unerfahren) das sicher ein unicode-string in einen ansi-string geschrieben wird.
Soweit ich etwas gelesen hab in 'Neu bei XE' werden wohl Strings doch wieder grundsätzlich anders behandelt.
Bin aber leider zu dumm eine Komponente zur Entwurfszeit zu debuggen.


Gruß Kurti

kurt 2. Dez 2010 14:04

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
Hab für mich ne Lösung gefunden.

Code:
procedure TStringAlignGrid.ListToCells(List: TList);
var v: PAnsiString;  // original v: PString;
    ACol, ARow: longint;
begin
  for ACol:= 0 to ColCount- 1 do
    for ARow:= 0 to RowCount- 1 do begin
      v:= GetItemCell(ACol, ARow, List);

      if v <> NIL then Cells[ACol,ARow]:= v^
                  else Cells[ACol,ARow]:= '';
    end;
end;
Und es schein alles zu gehen. Kann mir da einer erklären (will ja lernen) warum dies zw. D2010 und DXE anders ist?
Grüße Kurti

himitsu 2. Dez 2010 15:03

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
Von wo hast du eigentlich deine Version/PAS genommen, also welche Variante nutzt du?

PString:
bis Delphi 2007 = PAnsiString
ab Delphi 2009 = PUnicodeString


Wenn dort ein PAnsiString nötig ist, dann wurde wohl irgendwo vergessen den Speicher auf Unicode zu erweitern, weshalb es dort noch Ansi ist.


In Delphi XE wurde nun angeblich endlich mal dieses kranke StringChecking entfernt, welches 2009 mit eingeführt wurde.
Eventuell gibt es auch einfach noch irgendwo einen Fehler in der Umsetzung, welches durch dieses StringChecking ausgeglichen still und heimlich wurde. :gruebel:

kurt 2. Dez 2010 18:34

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
'' Von wo hast du eigentlich deine Version/PAS genommen, also welche Variante nutzt du? ''

Die - tstringgridalign2010_108.zip - die du empfohlen hattest.

amilano9 24. Apr 2011 11:44

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
Liste der Anhänge anzeigen (Anzahl: 1)
I'm from Croatia and i dont't speak german.

Your forum help me to convert TStringAlignGrid to Delphi XE.
Work fine for me. (Hint's also work). It should also run under 2009/2010

Thanks,

I atach ZIP file

PopEye 4. Aug 2011 12:27

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
Thanks for your effort.
The cells seem to work fine but when I try hints I get an exception. If you look at the .dfm after entering some hints you see that the strings differ from the normal cell values. It seems like some unicode problems.
Regards,
Lennart

clnintego 13. Jun 2013 15:44

AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
 
I use the version for XE as uploaded by amilano9. When I try to install it with Delphi XE4 I get the error frxClass.dcu not found.

Anybody got this working?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 Uhr.

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