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 Item in DrawItem ändern? (https://www.delphipraxis.net/180830-item-drawitem-aendern.html)

Mattze 21. Jun 2014 06:42

Item in DrawItem ändern?
 
Hallo,

ich glaube, dass es nicht geht, aber ich frage trotzdem...

Kann man in einer Listbox den gerade zu zeichnenden Item in der DrawItem noch ändern?
(Z. Bsp. ganz einfach Listbox.items[index]:='xyz' machen.
Da der item ja bei dieser Zuweisung neu gezeichnet wird, ruft DrawItem sich immer wieder selber auf. Kann man das verhindern?)

Gruß
Mattze

mkinzler 21. Jun 2014 08:15

AW: Item in DrawItem ändern?
 
Es macht auch keinen Sinn, dass so zu machen. Was hast Du den vor?

Mattze 21. Jun 2014 08:57

AW: Item in DrawItem ändern?
 
Hallo Markus,

ich schreibe mir gerade eine eigene Listbox (von TCustomListbox abgeleitet), die, natürlich, etwas mehr kann.
Geht auch schon ganz gut.

Nun fiel mir ein, dass ein Ereignis OnBeforeItemDraw vielleicht nicht schlecht wäre.
Das funktioniert auch - nur eben nicht die Änderung des items selber.

Eine Anwendung wäre z. Bsp. die Auflistung von Passwörtern mit einem Stellvertreterzeichen, die dann nur im Hint oder auf Anforderung im Klartext angezeigt werden.
Oder eben eine parallele Stringlist mit anderen Strings, die in irgendeiner Abhängigkeit die originalen der Listbox bei der Anzeige ersetzen.
Also, wenn es denn ginge, würde man schon eine Anwendung dafür finden. <ggg>

Das Problem ist aber, wie gesagt, das OnBeforeItemDraw.
Da drinnen kann man fast alles machen, nur eben nicht das item verändern.
Ist verständlich! Ich würde mich auch wundern, wenn es ginge, aber fragen kann man ja mal...

Gruß
Mattze

mkinzler 21. Jun 2014 09:02

AW: Item in DrawItem ändern?
 
Um das Passwort bei der Anzeige durch Sternchen o.ä. zu ersetzen musst du den Inhalt/die Items nicht ersetzen, sondern nur etwas anderes "Zeichnen".

Sir Rufo 21. Jun 2014 09:05

AW: Item in DrawItem ändern?
 
Zitat:

Zitat von mkinzler (Beitrag 1263080)
Um das Passwort bei der Anzeige durch Sternchen o.ä. zu ersetzen musst du den Inhalt/die Items nicht ersetzen, sondern nur etwas anderes "Zeichnen".

:thumb:

Mattze 21. Jun 2014 09:40

AW: Item in DrawItem ändern?
 
Hallo Marcus,

tolle Antwort.
Mir ist durchaus klar, dass man das mit dem Passwort anders regelt.
Aber schließlich wolltest Du ein Bsp. dafür, wozu man das verwenden KÖNNTE.

Das eigentliche Problem ist das OnBeforeItemDraw, das am Anfang von ItemDraw aufgerufen werden soll - wie gesagt.
Da kann man alles machen, nur nicht den Inhalt von Items[index] verändern. Deshalb die Frage.

Gruß
Mattze

Sir Rufo 21. Jun 2014 09:50

AW: Item in DrawItem ändern?
 
Zitat:

Zitat von Mattze (Beitrag 1263083)
Hallo Marcus,

tolle Antwort.
Mir ist durchaus klar, dass man das mit dem Passwort anders regelt.
Aber schließlich wolltest Du ein Bsp. dafür, wozu man das verwenden KÖNNTE.

Das eigentliche Problem ist das OnBeforeItemDraw, das am Anfang von ItemDraw aufgerufen werden soll - wie gesagt.
Da kann man alles machen, nur nicht den Inhalt von Items[index] verändern. Deshalb die Frage.

Gruß
Mattze

Ähm nochmal, warum willst du die Daten verändern, wenn du nur die Anzeige verändern willst?

So gesehen kann in den Items stehen was will und du kannst auch beim Zeichen zeichnen was du willst. Darum versteht hier niemand, aus welchem Grund du bei der Anzeige die Daten verändern möchtest.

Es macht einfach keinen - absolut keinen - Sinn

Mattze 21. Jun 2014 10:15

AW: Item in DrawItem ändern?
 
Hallo,

1. Die Frage ist nicht warum, sondern ob es überhaupt geht. Ich will es ja gar nicht machen! Es wäre halt interessant für mich. Aus rein logischen Gründen würde ich sagen, dass das gar nicht gehen kann.
2. Ich möchte gerne vermeiden, dass ich das in einigen Jahren versuche, weil ich mich nicht mehr daran erinnert habe, dass es nicht gehen kann. Und dann eine aufwendige (und sinnlose) Fehlersuche starte...

Mehr steckt da im Grunde nicht dahinter. Es ist für mich immer bloß sehr interessant, Grenzen zu finden (oder zu sehen). Manchmal kann man die dann auch gut verallgemeinern und fällt beim nächsten Mal nicht wieder auf solche "Dummheit" rein.

Gruß
Mattze

Popov 21. Jun 2014 12:20

AW: Item in DrawItem ändern?
 
Sollte nicht gehen:
Delphi-Quellcode:
procedure GetFiles(Path: String; List: TStrings);
var
  Search: TSearchRec;
begin
  //Path := IncludeTrailingBackslash(Path);
  if FindFirst(Path + '*.*', faAnyFile, Search) = 0 then
  repeat
    List.Add(Path + Search.Name);
  until FindNext(Search) <> 0;
  FindClose(Search);
end;

procedure TForm1.FormCreate(Sender: TObject);
const
  Path = 'c:\';
begin
  ListBox1.Style := lbOwnerDrawFixed;
  ListBox1.Sorted := True;
  GetFiles(Path, ListBox1.Items);
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
const
  PfadeVerstecken = True; //<<<<
var
  FileName: String;
begin
  with (Control as TListbox) do
  begin
    if PfadeVerstecken then
      FileName := ExtractFileName(Items[Index])
    else
      FileName := Items[Index];

    Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top, FileName);

    //Items[Index] := '[Mattze] ' + FileName; //Endlos, wg. Aktualisierung
  end;
end;
ListBox1DrawItem reagiert auf Änderung, dann gibt es eine Änderung im Item, also ruft sich ListBox1DrawItem wieder auf, dann gibt es eine Änderung im Item, usw.

Den Inhalt ändern, der gezeichnet werden soll, ist ja kein Problem (siehe Beispiel).

Sir Rufo 21. Jun 2014 12:26

AW: Item in DrawItem ändern?
 
Zitat:

Zitat von Mattze (Beitrag 1263086)
Hallo,

1. Die Frage ist nicht warum, sondern ob es überhaupt geht. Ich will es ja gar nicht machen! Es wäre halt interessant für mich. Aus rein logischen Gründen würde ich sagen, dass das gar nicht gehen kann.
2. Ich möchte gerne vermeiden, dass ich das in einigen Jahren versuche, weil ich mich nicht mehr daran erinnert habe, dass es nicht gehen kann. Und dann eine aufwendige (und sinnlose) Fehlersuche starte...

Mehr steckt da im Grunde nicht dahinter. Es ist für mich immer bloß sehr interessant, Grenzen zu finden (oder zu sehen). Manchmal kann man die dann auch gut verallgemeinern und fällt beim nächsten Mal nicht wieder auf solche "Dummheit" rein.

Gruß
Mattze

Denk einfach daran, dass dein Füller/Kugelschreiber auch nicht mit dir diskutiert, was du gerade im Kopf/Sinn hast ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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