Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ListView-SubItem wird nicht eingetragen (https://www.delphipraxis.net/124156-listview-subitem-wird-nicht-eingetragen.html)

Mr_G 15. Nov 2008 21:24


ListView-SubItem wird nicht eingetragen
 
Hallo zusammen,
ich habe mich heute mal ein bisschen an NonVCL probiert um mal ein kleines Tool zu schreiben aber leider hapert es am ListView:
Ich durchlaufe mittels RegEnumKeyEx die Registry und suche mir meine Schlüssel raus. Nun sollen bestimmte Schlüsselnamen zu einem Eintrag im ListView führen aber wenn ich in der bedingten Anweisung meinen Buffer mit dem Schlüsselnamen einbaue, werden keine SubItems mehr hinzugefügt:
Delphi-Quellcode:
//...
ZeroMemory(pBuf, pBufLen +1);
dwLen := pBufLen +1;
ret := RegEnumKeyEx(rkey, i, pBuf, dwLen, nil, nil, nil, nil);
if ret = ERROR_SUCCESS then
  begin
    if pBuf[0] = 'A' then //if true then -> Test2 erscheint im ListView
    begin
      lvi.mask     := LVIF_TEXT;
      lvi.iItem    := i;
      lvi.iSubItem := 0;
      lvi.pszText  := 'Test';
      SendMessage(hwndLV, LVM_INSERTITEM, 0, LParam(@lvi));
      lvi.iSubItem := 1;
      lvi.pszText  := 'Test2';
      SendMessage(hwndLV, LVM_SETITEM, 0, LParam(@lvi));
    end;
  end
else
  break;
Inc(i);
//...
Nun hoffe ich mir kann da jemand auf die Sprünge helfen.

Luckie 15. Nov 2008 21:56

Re: ListView-SubItem wird nicht eingetragen
 
Subitem steht ja auch auf null:
Delphi-Quellcode:
lvi.iSubItem := 0;
Siehe dazu auch meine Tutorials: http://win32api.michael-puff.de

Mr_G 15. Nov 2008 22:01

Re: ListView-SubItem wird nicht eingetragen
 
Zitat:

Zitat von Luckie
Subitem steht ja auch auf null:
Delphi-Quellcode:
lvi.iSubItem := 0;
Siehe dazu auch meine Tutorials: http://win32api.michael-puff.de

:gruebel:
Zitat:

Zitat von Mr_G
Delphi-Quellcode:
//...
lvi.iSubItem := 1; //<--
lvi.pszText  := 'Test2';
SendMessage(hwndLV, LVM_SETITEM, 0, LParam(@lvi));
//...

Außerdem hätte das ganze dann auch nicht ohne die if-Anweisung funktioniert, oder übersehe ich da was?

Matze 15. Nov 2008 22:08

Re: ListView-SubItem wird nicht eingetragen
 
Zitat:

Zitat von Mr_G
Zitat:

Zitat von Luckie
Subitem steht ja auch auf null:
Delphi-Quellcode:
lvi.iSubItem := 0;
Siehe dazu auch meine Tutorials: http://win32api.michael-puff.de

:gruebel:

Schau dir dort die Win32API_Tutorials_pdf.pdf an und dort dann Seite 102.

Edit: [quote]-Tag geschlossen.

Mr_G 15. Nov 2008 22:12

Re: ListView-SubItem wird nicht eingetragen
 
Hmm... iSubItem ist doch 1 (siehe erster Beitrag 14. Codezeile)? Oder hab ich riesige Tomaten auf den Augen?

Luckie 15. Nov 2008 22:22

Re: ListView-SubItem wird nicht eingetragen
 
Ups, ich habe den zweiten Eintrag übersehen.

Mr_G 16. Nov 2008 09:35

Re: ListView-SubItem wird nicht eingetragen
 
Wichtig wäre vielleicht noch zu sagen, dass pBufLen loischerweise ein PChar ist. An die Größe komme ich so:
Delphi-Quellcode:
if RegQueryInfoKey(rkey, nil, nil, nil, @KeyCount, @pBufLen, nil, nil, nil,
  nil, nil, nil) = ERROR_SUCCESS then
begin
  GetMem(pBuf, pBufLen +1);
  //...
Ich hab mich dabei übrigens am NonVCL-Tutorial von Luckie bzw. Mathias Simmack orientiert.
Wie kommt es blos zu diesem seltsamen Verhalten?

P.S.: Die Werte, die ausgelesen werden, stimmen und der Code wird vollständig durchlaufen, doch das Subitem kommt nicht im ListView an.

Mr_G 18. Nov 2008 21:29

Re: ListView-SubItem wird nicht eingetragen
 
Also einen Fehler hab ich zwischendurch gefunden :oops:: Ich hab aufgrund der äußeren Schleife mit falschen Werten für iItem gearbeitet. Kein Wunder, dass da mist bei rumkommt.
Ein Problem habe ich haber immernoch. Ich habe das Befüllen in einen Thread ausgelagert:
Delphi-Quellcode:
//...
hFillThread := BeginThread(nil, 0, @FillThread, @hwndLV, 0, FillThreadId);
//...
function FillThread(Param: PDWORD): Integer;
var
  //...
  hLV: DWORD;
begin
  hLV := Param^;
  //Code zum füllen...
end;
//...
Wenn ich das ganze unter Vista laufen lasse funktioniert es solange ich kein Manifest benutze, mit Manifest in der Resource bleibt das ListView leer. Unter XP bleibt es mit und ohne leer. Der Code zum füllen funktioniert nun eigentlich tadellos (wenn ich FillThread einfach so aufrufe statt den Thread zu starten wird das LV unter Vista und XP immer brav gefüllt).
Was muss ich denn jetzt noch beachten wenn ich das in einen Thread auslagern will?

Luckie 18. Nov 2008 21:41

Re: ListView-SubItem wird nicht eingetragen
 
Mit dem Listview und einem Manifest gab es irgendwie Probleme, aber ich meine Mathias hätte dazu auch was in den Tutorials geschrieben.

Mr_G 18. Nov 2008 21:55

Re: ListView-SubItem wird nicht eingetragen
 
Leider finde ich im Tutorial nichts dazu... ich fürchte das Problem ist auch eher im Thread begründet, denn unter XP funktioniert ja keine der Varianten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.
Seite 1 von 2  1 2      

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