AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi MeasureItem und Items.Objects funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

MeasureItem und Items.Objects funktioniert nicht

Ein Thema von MacGuyver · begonnen am 22. Aug 2007 · letzter Beitrag vom 25. Aug 2007
 
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: MeasureItem und Items.Objects funktioniert nicht

  Alt 25. Aug 2007, 14:48
Tach Leute,

ich habe da noch ein paar Sachen zum Thema zusammen getragen. Ich habe es über eine weitere Stringliste erledigt. Ich setze als String nicht den Inhalt des sichtbaren. Der Platz reicht eh nicht. Ich bilde einen String, der zum Sortieren verwendet wird. So bekommen die ganz oben einsortierten Einträge eine 0 davor und die unteren eine 9 am Anfang. Nach dem Sortieren wird dann nur noch

ListBox.Items.Text:=StringList.Text ausgeführt.
Bei der Berechnung der Positionen muß man gleich den Slider mit einplanen. Da habe ich eine ganze Zeit gebraucht das zu peilen.
Die einzelnen Elemente des Eintrags berechne und speicher ich in dem Objekt, das jeder Eintrag hat. Ich packe die Werte gleich in ein TRect, den braucht man so wie so für die Funktion DrawText aus der API.

Delphi-Quellcode:
DrawText(lCanvas.Handle
        ,PChar(Info)
        ,-1
        ,FRectInfo
        ,DT_LEFT + DT_TOP + DT_CALCRECT + DT_WORDBREAK);
Beim Zeichnen muß man dann noch bedenken, daß die Positionen aus dem Rect mit eingerechnet werden müssen:

Delphi-Quellcode:
function lAddRect( aRect : TRect):TRect;

var
  lRect : TRect;

begin
  lRect.Left:=aRect.Left + Rect.Left;
  lRect.Top:=aRect.Top + Rect.Top;
  lRect.Right:=aRect.Right + Rect.Left;
  lRect.Bottom:=aRect.Bottom + Rect.Top;
  Result:=lRect;
end;
Beim Ziehen der Box muß man etwas mit dem Inhalt spielen. Falls jemand eine schönere Lösung hat, soll er das hier Kund tun.

Delphi-Quellcode:
procedure MainForm.ListBox1Resize(Sender: TObject);

var
  lText : String;
  lLocked : Boolean;

begin
  lLocked:=LockWindowUpdate(ListBox1.Handle);
  ListBox1.Items.BeginUpdate;
  lText:=ListBox1.Items.Text;
  ListBox1.Items.Clear;
  ListBox1.Items.Text:=lText;
  ListBox1.Items.EndUpdate;
  if lLocked then
    LockWindowUpdate(0);
end;
Die ganze Geschichte flimmert zwar beim Ziehen, ist aber egal. Wann zieht man schon.


Stefan
Angehängte Grafiken
Dateityp: bmp listbox_186.bmp (151,6 KB, 20x aufgerufen)
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
 


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 09:05 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