AGB  ·  Datenschutz  ·  Impressum  







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

Control neu zeichnen?

Ein Thema von alcaeus · begonnen am 4. Mai 2005 · letzter Beitrag vom 15. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Control neu zeichnen?

  Alt 4. Mai 2005, 02:21
Hallo allerseits,

nachdem ich es endlich geschafft habe, die kleinen Pfeilchen in die ListView zu bekommen, stehe ich vor einem kleineren Problem: Nachdem die Groesse einer Column veraendert wurde, verschwindet das Bildchen, und ich stehe vor dem Problem, dass ich es neu zeichnen muss (wer haette das gedacht ). Ich habe versucht es im OnCustomDraw, bei WMPaint oder auch bei PaintWindow neu zu zeichnen, aber nein, jedesmal nachdem ich die Groesse der Column veraendert habe, war das Icon wieder weg
Kann mir jemand sagen, welche Message ich abfangen muss, um das Bitmap wieder auf die Column zeichnen zu koennen?

Thanx and Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#2

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:03
Zitat:
nachdem ich es endlich geschafft habe, die kleinen Pfeilchen in die ListView zu bekommen
Wo und wie hast du es denn geschafft. Wenn du mir sagst, wo du es eingebaut hast, kann ich dir evtl. sagen wo der Code hinkommt.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:07
Im Moment zeichne ich die Pfeilchen im ColumnClick mit diesem Code:
Delphi-Quellcode:
procedure TSortListView.DrawSortImage;
var
   Buf: array[0..MAX_PATH-1] of Char;
   HDItem: THDItem;
begin
   if not FShowSortImages then
      exit;
   if FHeader = 0 then
      FHeader := ListView_GetHeader(Self.Handle);
   HDItem.Mask := HDI_FORMAT or HDI_IMAGE or HDI_ORDER or HDI_TEXT or HDI_WIDTH;

   HDItem.pszText := Buf;
   HDItem.cchTextMax := SizeOf(Buf);

   Header_GetItem(FHeader, FLastSorted, HDItem);

   HDItem.Mask := HDItem.Mask or HDI_BITMAP;
   HDItem.fmt := HDItem.fmt or HDF_BITMAP or HDF_BITMAP_ON_RIGHT;

   if FSortDir = sdAscending then
      HDItem.hbm := FAscImage.Handle
   else
      HDItem.hbm := FDescImage.Handle;

   Header_SetItem(FHeader, FLastSorted, HDItem);
end;
Die Pfeile bleiben waehrend des Resizen der Columns schoen brav da wo sie hingehoeren, und werden auch mitgeschoben, aber sobald ich mit dem Resizen aufhoere, wird anscheinend der Header neu gezeichnet und das Pfeilchen ist weg.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#4

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:16
Jetzt müsste ich nur noch wissen, wo du die Procedure "DrawSortImage" aufrufst.

Edit: Ich gehe davon aus, das du TSortListView von TListView abgeleitet hast. Oder?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:19
Zitat von alcaeus:
Im Moment zeichne ich die Pfeilchen im ColumnClick mit diesem Code:
Mehr kann ich da nicht sagen. Wenn es dir hilft, gibts noch den Source der dir sagt wie ich ueberhaupt in die ColumnClick-Routine komme in der gezeichnet wird:
Delphi-Quellcode:
inherited Create(AOwner);
inherited OnColumnClick := ColumnClick;
inherited OnCompare := Compare;
Aber wie gesagt...im ColumnClick (also beim Klick auf eine Spalte).
Und wenn du den Code auch noch willst, dann bitte:
Delphi-Quellcode:
procedure TSortListView.ColumnClick(Sender: TObject;
   Column: TListColumn);
begin
   ClearSortImage;
   if Assigned(OnColumnClick) then
      OnColumnClick(Sender, Column);
   FColumnToSort := Column.Index;

   if FColumnToSort = FLastSorted then
   begin
      FSortDir := TSortDir(1-Ord(FSortDir));
   end
   else
   begin
      FSortDir := sdAscending;
   end;
   FLastSorted := FColumnToSort;
   (Sender as TCustomListView).AlphaSort;
  DrawSortImage;
end;
Der ClearSortImage-Aufruf sorgt nur dafuer, dass das alte Bildchen geloescht wird.

Greetz
alcaeus

[edit]
Zitat von bernau:
Ich gehe davon aus, das du TSortListView von TListView abgeleitet hast. Oder?
Jup, konnte mich nicht zwischen TListView und TCustomListView entscheiden
[/edit]
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:21
Hallo,

den Indikator für die Spaltensortierung setze ich stets über listColumn.ImageIndex - jetzt schäme ich mich fast ein wenig.

Grüße vom marabu

Schreibfehler: ImageIndex, nicht ItemIndex - war schon klar denke ich.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#7

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:27
Evtl hilft es, wenn die Procedure UpdateColumns überschreibst und dort DrawSortImage aufrufst.


Delphi-Quellcode:
Procedure UpdateColumns;override;


Procedure TSortListview.UpdateColumns;
begin
  inherited;
  DrawSortImage;
end;

(nicht getestet)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:29
Nope. override ging nicht, da die Methode in der Vorgaengerklasse als static deklariert ist, also habe ich reintroduce genommen. Doch da, kein Ergebnis. Danke trotzdem

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.294 Beiträge
 
Delphi 12 Athens
 
#9

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 09:49
Zitat von alcaeus:
Nope. override ging nicht, da die Methode in der Vorgaengerklasse als static deklariert ist.
Ups. Habe ich übersehen daß die Methode statisch ist.


Normalerweise sollte Paint überschrieben werden. Geht aber nur bei Objecten, die von TCustomControl abgeleitet sind.

Evtl. Repaint überscheiben. Oder nachschauen, wie Paint in TCustomControl implementiert ist.
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#10

Re: Control neu zeichnen?

  Alt 4. Mai 2005, 12:51
Schonmal versucht den Header (also nur das Headercontrol, das gehört ja eigentlich nicht zum ListView) zu subclassen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:35 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