Toon posts:

[Delphi] Caption niet tonen tijdens draggen bij ListView

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het probleem dat wanneer ik een item uit 1 ListView drag naar een andere ListView de caption (dus heel de tekst van het item) zichtbaar is (ik werk met ReportMode). Wanneer je meer dan 1 item tegelijk drag zie je geen caption alleen maar de DragCursor.

Ik wil in de ListView een horizontale lijn tekenen tussen de items, zodat het voor de gebruiker 100% duidelijk is of het gedropte item boven het item komt te staan of er onder.

Maar door die caption tijdens het draggen loopt het tekenen in de war. Er wordt op het canvas van de ListView de horizontale lijn getekend. Bij het draggen van meer items gaat het wel goed omdat er dan geen caption wordt weergegeven.

De oplossing zou dus zijn om ook bij het draggen van 1 item geen tekst weer te geven tijdens die actie. Maar nu is de vraag of het kan en hoe. Ik heb gezocht op MSDN maar kan er helemaal niks van vinden.

De vraag is, is het wel mogelijk of zit het zover in het component geintegreerd dat het niet uit te schakelen is?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Waar doe jij het tekenen van die lijnen?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
In de dragover event:

Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure Tfrm_ArtikelVolgorde.lstvw_NieuweVolgordeDragOver(Sender,
  Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var NewY: Integer;
    H: Integer;
begin
  Accept := False;
  if (Source is TListView) then
  begin
    if (Gesleept <> '') and (TListView(Source).Name = 'lstvw_HuidigeVolgorde') then
    begin
      H := lstvw_NieuweVolgorde.ClientHeight div lstvw_NieuweVolgorde.VisibleRowCount;
      Accept := True;
      NewY := (Y div H) * H;
      lstvw_NieuweVolgorde.Canvas.Pen.Mode := pmNOTXOR;
      lstvw_NieuweVolgorde.Canvas.Pen.Color := clRed;
      if (OldX <> 0) and (OldY <> 0) then
      begin
        lstvw_NieuweVolgorde.Canvas.MoveTo(0, OldY);
        lstvw_NieuweVolgorde.Canvas.LineTo(lstvw_NieuweVolgorde.ClientWidth, OldY);
      end;
      lstvw_NieuweVolgorde.Canvas.MoveTo(0, NewY);
      lstvw_NieuweVolgorde.Canvas.LineTo(lstvw_NieuweVolgorde.ClientWidth, NewY);
      OldX := X;
      OldY := NewY;
    end;
  end;
end;

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Volgensmij kan je de drag image uitzetten door csDisplayDragImage uit de ContolStyle te verwijderen:
Delphi:
1
 lstvw_NieuweVolgorde.ControlStyle := lstvw_NieuweVolgorde.ControlStyle - [csDisplayDragImage];

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Bedankt, het werkt hierdoor perfect.

Alleen waar staan deze dingen genoteerd? Ik neem aan in de MSDN? Ik heb het zelf daar niet gezien.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

ControlStyle is een property in de Delphi VCL, dus die zul je in de Delphi help terugvinden. En in je code insight natuurlijk ;)

日本!🎌

Pagina: 1