AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Item in DrawItem ändern?

Ein Thema von Mattze · begonnen am 21. Jun 2014 · letzter Beitrag vom 23. Jun 2014
Antwort Antwort
Seite 2 von 4     12 34      
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#11

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 12:35
Hallo Popov,

genau wegen des dann eintretenden "Endlosaufrufs" von DrawItem meinte ich, dass das logischerweise nicht gehen kann.
Der Hintergrund ist, dass die Listbox automatisch bei einer Änderung des Inhaltes den entsprechenden Item neu zeichnet.
Also, sobald items[index]:='irgendwas' gemacht wird, schreibt sie die Änderung und das soll sie ja auch.

Wie gesagt, etwas anderes als den Itemtext auszugeben ist kein Problem. Mache ich ja in meiner Listview ständig.
Es wäre eben nur interessant, ob man das irgendwie hinbiegen kann.

Gruß
Mattze

PS: Richtig, Sir Rufo! Aber fragen kann man ja mal...
So wurden schon viele Sachen geklärt und oft weiß man selber gar nicht, was man eigentlich wirklich will.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 12:40
.onItemDraw() ist nun mal für das Zeichnen von Einträgen (Darstellung) zuständig. Hier sollte man nichts an den Daten ändern.
Wenn Dir das Radio/Fernseher zu laut/leise ist regelst Du ja auch die Lautstärke über den Regler oder der Fernsteuerung und rufst nicht beim Sender an und verlangst, dass Sie die daten ändern sollen (Film/Musik).
Markus Kinzler
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#13

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 14:29
Hallo,

tschja, so ist das eben. Vieles ist für vieles zuständig und manches sogar für mehr als man denkt und vermuten würde.

Die Möglichkeiten muss man halt ausloten.

Gruß
Mattze
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 14:36
Natürlich kann man auch mit einem Teelöffel eine Tunnel durch die Alpen graben.
Markus Kinzler
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#15

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 15:57
Eben!

Aber es gibt auch positive Beispiele.
Hat sicherlich jeder schon mal erlebt.
Man weiß nicht, wie man weiterkommt und macht und macht...
Letztendlich war es dann nur eine klitzekleine einfache Sache, von der man nie für möglich gehalten hätte, dass sie funktioniert!

Gruß
Mattze
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#16

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 16:36
Gehen, geht alles, nur wie sinnvoll ist das?
Delphi-Quellcode:
type
  TTest = class
    Text: String;
  end;

procedure AddItem(LB: TStrings; Str: String);
var
  Test: TTest;
begin
  Test := TTest.Create;
  Test.Text := Str;
  LB.AddObject('', Test);
end;

procedure ModItem(LB: TStrings; AIndex: Integer; Str: String);
begin
  if (AIndex >= 0) and (AIndex < LB.Count) then
    TTest(LB.Objects[AIndex]).Text := Str;
end;

function ItemStr(LB: TStrings; AIndex: Integer): String;
begin
  Result := TTest(LB.Objects[AIndex]).Text;
end;

procedure DelItem(LB: TStrings; AIndex: Integer);
begin
  if (AIndex >= 0) and (AIndex < LB.Count) then
    TTest(LB.Objects[AIndex]).Free;
end;

procedure GetFiles(Path: String; List: TStrings);
var
  Search: TSearchRec;
begin
  //Path := IncludeTrailingBackslash(Path);
  if FindFirst(Path + '*.*', faAnyFile, Search) = 0 then
  repeat
    AddItem(List, 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(ItemStr(Items, Index))
    else
      FileName := ItemStr(Items, Index);

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

    ModItem(Items, Index, '[Mattze] ' + FileName); //<<<<<<<<<<<<<
  end;
end;

procedure TForm1.RefreshBtnClick(Sender: TObject);
begin
  ListBox1.Refresh;
end;
Also hier kann man den Inhalt ändern, ohne Endlosschleife, weil nicht der Item-String genutzt wird, sondern der String im Objekt abgelegt ist. Dadurch merkt die ListBox nicht sofort, wenn sich der Inhalt ändert.

Trotzdem, etwas sinnvolles wird nichts draus, da bei jeder Aktualisierungs die Änderung vorgenommen wird.
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#17

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 17:44
Hallo Popov,

das wäre tatsächlich eine ernstzunehmende Idee.
Statt über die Items, die die Listbox automatisch aktualisieren, geht man über die Objekte.
Wenn man das Drawitem von CustomListbox sowieso in seiner Komponente überschreibt, kann man das auch gleich umdrehen. Sprich: Die normalen Listeinträge (soweit möglich) als Zusatzinfos verwenden und die Objecte als die "normalen" Einträge. Wenn die geändert werden, wird Drawitem nicht automatisch aufgerufen.

Wobei...

Na ja, jedenfalls erst mal ein schönes Wochenende allen!

Gruß
Mattze
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 18:23
Und dann verwendet der Benutzer der Komponente ebenfalls die Objects-Eigenschadt, und alles geht den Bach runter.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 18:39
Ist doch egal, Hauptsche man hat etwas geschafft, was eigentlich nicht gehen sollte, weil es keinen Sinn macht!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#20

AW: Item in DrawItem ändern?

  Alt 21. Jun 2014, 18:51
In TTest ist ja noch Platz für ein weiteres Objects-Feld ... darf der Endanwender nur nicht vergessen, daß er jetzt wo anders suchen muß.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:31 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