![]() |
tListView-Spalten
Hallo zusammen,
ich habe ein Programm, in dem ich ein tListView eingebaut habe. Hier werden in einstellbar vielen Spalten Daten angezeigt. In einer INI speichere ich die Breite der Spalten, damit sie beim nächsten Start so wieder erscheinen wie beim Beenden. Jetzt die Frage: wenn ich die Windows-Kombination [Strg]+[Num +] verwende, werden die Spaltenbreiten automatisch auf den Inhalt der Spalten angepasst. Jedoch wird diese Breite nicht in die Width-Eigenschaft der Spalte eingetragen, da steht noch der alte Wert. Wie bekomme ich diese Breite? |
Re: tListView-Spalten
Delphi-Quellcode:
Lies mal die breite damit aus!
ListView_GetColumnWidth
|
Re: tListView-Spalten
Hi neolithos,
das wird nich funktionieren, weil das ein C++-Makro ist. ;) Chris PS:
Delphi-Quellcode:
ListView1.Column[0].Width; // zum Bleistift
|
Re: tListView-Spalten
So mach ich's ja momentan, aber das kann das erkennt nicht die [Strg]+[+]-Änderung. Das ist ja mein Problem.
MfG |
Re: tListView-Spalten
Bei mir steckt die in der CommCtrl.
|
Re: tListView-Spalten
Delphi-Quellcode:
Ich habe gerade folgendes ausprobiert!
ShowMessage(IntToStr(ListView1.Columns[0].Width));
ShowMessage(IntToStr(ListView_GetColumnWidth(ListView1.Handle, 0))); Die Werte sind wirklich ungleich nach Strg+NumPlus! :shock: |
Re: tListView-Spalten
Hi,
seit wann funktionieren dann C++-Makros unter Delphi? :shock: Welches davon ist denn korrekt? Eigentlich doch das erste, oder? Chris |
Re: tListView-Spalten
Ne, das zweite!
Und ListView_??? sind keine Makro's sondern Funktionen! Aber Vorsicht bei ???W-Funktionen, die sind meist falsch implementiert! Die Erfahrung musste ich nämlich schon machen! |
Re: tListView-Spalten
Zitat:
In den C-Header-Files sind die ListView_???-Dinger als Makros definiert. Da es sowas in ObjectPascal nicht gibt, haben die Borländer Funktionen draus gemacht. |
Re: tListView-Spalten
Hi,
danke für das Füllen dieser Bildungslücke. Und das meinte ich ja auch... ;) Was mich wunderte war nur, dass Borland diese überhaupt übersetzt hat, denn im Endeffekt ist es doch nur eine Abkürzung für SendMessage-Nachrichten. Chris |
Re: tListView-Spalten
Zitat:
|
Re: tListView-Spalten
Zitat:
|
Re: tListView-Spalten
Was könnte wohl daran falsch sein?
Delphi-Quellcode:
function ListView_InsertItemW(hWnd: HWND; const pItem: TLVItemW): Integer;
begin Result := Integer( SendMessage(hWnd, LVM_INSERTITEM, 0, Longint(@pItem)) ); end; function ListView_FindItemW(hWnd: HWND; iStart: Integer; const plvfi: TLVFindInfoW): Integer; begin Result := SendMessage(hWnd, LVM_FINDITEM, iStart, Longint(@plvfi)); end; function ListView_GetStringWidthW(hwndLV: HWND; psz: PWideChar): Integer; begin Result := SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, Longint(psz)); end; u.s.w. |
Re: tListView-Spalten
Hi,
also wenn die Borland so definiert hat, dann will ich nichts gesagt haben. Chris |
Re: tListView-Spalten
Alle die den Source "CommCtrl.pas" haben können es bestätigen!
Gut das ich ihn an dem Tag (wo mir das aufgefallen ist) hatte! Ich hatte nämlich schon an mir selbst gezweifelt! Warum es nicht funktioniert und nur ein Buchstabe angefügt wird! :roll: Aber nun weis ich es ja! |
Re: tListView-Spalten
Um mal zu meinem Problem zurück zu kommen:
neolithos Methode funktioniert jedenfalls. Hab halt die CommCtrl eingebunden. Danke. |
Re: tListView-Spalten
Zitat:
Delphi-Quellcode:
In den C-Headerdateien gibt´s dafür die UNICODE-Definition. Ist die gesetzt, wird bei der Nutzung der Header auch die korrekte Nachricht (in dem Fall LVM_GETSTRINGWIDTHW) benutzt. Den gleichen Effekt könnte man mit bedingter Compilierung
const
{$EXTERNALSYM LVM_GETSTRINGWIDTHA} LVM_GETSTRINGWIDTHA = LVM_FIRST + 17; {$EXTERNALSYM LVM_GETSTRINGWIDTHW} LVM_GETSTRINGWIDTHW = LVM_FIRST + 87; {$EXTERNALSYM LVM_GETSTRINGWIDTH} LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHA;
Delphi-Quellcode:
natürlich auch in den Units von Borland erreichen. Das setzt aber den Quellcode voraus, und man muss diesen bearbeiten ... bei der Masse an Units könnte das u.U. eine ganze Weile dauern, bis man alles nach evtl. Ansi- und Unicode-Nachrichten abgegrast hat. :(
{$DEFINE UNICODE}
// ... viele Codezeilen ... const {$EXTERNALSYM LVM_GETSTRINGWIDTH} {$IFDEF UNICODE} LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHW; {$ELSE} LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHA; {$ENDIF} Zitat:
Dass auch Microsoft dabei Fehler unterlaufen, beweisen ![]() |
Re: tListView-Spalten
Das man Delphi-Programm, ob nonVCL oder VCL, nicht auf Uni-Code umschalten kann stört mich seit dem ich die vorzüge für Mehrsprachige Anwendungen entdeckt habe!
Weiterhin ist die Schlampig umgesetzte Thread-Sicherheit in der VCL mir ein Dorn im Auge! Ich halte viel auf Delphi bzw. Object-Pascal, aber die zwei wünsche hätten die Borland-Leute schon mal Regeln können! Doch wird durch .NET-Geschichte (was mich noch nicht überzeugt hat) ja die ganze VCL in den Hintergrund rücken! *schade* Das war vielleicht OT aber ich musste es mal loswerden! |
Re: tListView-Spalten
Zitat:
Was mich lediglich interessieren würde, sind ein paar spezielle Win XP-Dinge und deren Umsetzung in .NET. Okay, ich habe nur Beta 2 vom letzten VS.NET (nicht die aktuelle Version!), vielleicht ist das im aktuellen Visual Studio ja schon anders, aber irgendwie habe ich bspw. bei der List-View die neuen Befehle (Gruppierung, Spalte markieren) vermisst. |
Re: tListView-Spalten
Im .NET gibt es kein
ScrollWindow SetCaret ListView-Owner-Data ListView-Owner-Draw ... jedenfalls habe ich es noch nicht gefunden! Und API-Rufe (PInvokes) will ich nicht verwenden weil dies gegen den .NET-Etos (Plattform-Unabhängigkeit - die derzeit nicht existiert) verstoße. Will man API-Rufe verwenden muss man C-Header doch wieder übersetzen. [das geht hier langsam vom Thema ab] |
Re: tListView-Spalten
Zitat:
|
Re: tListView-Spalten
Darf ich mal kurz stören? Ja? Danke.
Wenn euch das Thema am Herzen liegt, dann macht doch bitte dazu einen extra Thread auf, denn das wird etwas offtopic jetzt. Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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