![]() |
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. |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Wiederholung :
Zitat:
|
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 |
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 |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Zitat:
Hast du (gullatrulla) mal ein Beispielprogramm? Ein Debuggen wäre ohne sowas etwas schwierig. |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Zitat:
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 |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Zitat:
Die Dateigröße sollte bei heutigen Speicherpreisen kein Problem mehr darstellen |
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:
|
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. |
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? |
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 |
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. |
Re: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 201
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
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:
|
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: |
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 |
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 |
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 |
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) |
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 |
AW: TStringAlignGrid Andreas Hörstemeier/Delphi2009 oder 2010
Hab für mich ne Lösung gefunden.
Code:
Und es schein alles zu gehen. Kann mir da einer erklären (will ja lernen) warum dies zw. D2010 und DXE anders ist?
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; Grüße Kurti |
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: |
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. |
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 |
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 |
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 05:50 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-2025 by Thomas Breitkreuz