VST: bei mausbeweung soll nicht neugezeichnet werden !

Rund um die LCL und andere Komponenten
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

VST: bei mausbeweung soll nicht neugezeichnet werden !

Beitrag von pluto »

Hallo,
ich habe es tatsächlich Geschafft das Horizontale scrollen in den greif zu bekommen, allerdings mit einem kleinen Bug:
Wenn ich mit der Maus über die VST fahre dann verschwindet der Header und kommt erst wieder beim Scrollen !

Kann mir Jemand sagen wie ich verhindern könnte das bei einer Maus Bewegung
nicht neu gezeichnet wird ?
Weil dann währe das Problem erstmal gelöst !
(Die Lösung werde ich posten sobald alles geklappt hat, oder bei nachfrage) !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

wie soll denn das gehen ? dann hast du doch ne mauspur über das ganze control ....
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Das Problem ist halt das, der Inhalt der VST sofort verschwindet, wenn ich mit der Maus drüber fahre.
Und ich dachte ich könnte irgenwie verhindern das sich bei einer Maus Bewegung nicht immer alles neuzeichnet.

Hättest du/ihr eine Idee für ich das verhindern kann ? also
Das neuzeichnen
oder
eine Idee für eine Lösung für das Problem ?

aber das Verstehe ich eigentlich überhaupt nicht, weil bei andren Komponenten wird keine Paint ausgelöst wenn ich mit der Maus drüber fahre z.b. bei der Paintbox oder beim Memo(da bin ich mir nicht so sicher...)
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »


aber das Verstehe ich eigentlich überhaupt nicht, weil bei andren Komponenten wird keine Paint ausgelöst wenn ich mit der Maus drüber fahre z.b. bei der Paintbox oder beim Memo(da bin ich mir nicht so sicher...)


wie solln das deiner meinung nach gehen ?
wen du die maus über ne kömponente nbewegst muss die auch neugezeichnet werden
beim memo dürfte das nicht so sein weil das vom interface gezeichenet wird und nicht von lazarus ...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Kann die VST den Inhalt nicht vohrer sichern der gezeichnet wurden ist und dann bei einer Maus Bewegung wieder geben ?
wenn die hot Eigenschaft auf false ist ?

Wie kann ich denn den Header manuell neuzeichnen lassen ?
darum geht es mir eigentlich nur !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Klar kann er hast ja den code ...
Nur warum solche umwege gehen ?
häng doch einfach mal deinen code an was hast du denn nun gemacht ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

irgenwie habe ich keine e-mail erhalten das hier eine antwort gekommen ist...
naja evlt. habe ich sie auch übersehen.

also mein weg war folgender:
ich habe im ereignis ItemPaint das zeichnen selbst übernommen....

allerdings muss zuerst verhindert werden das im ereignis onGetText
der text gezeichnet wird der darf nur einmal gezeichnet werden danach nicht !

im moment bin ich unter Windows da habe ich keinen zugrief auf den qullcode !

ich lade denn qullcode hoch sobalt ich unter Linux bin... evlt. weiß du eine lösung !

Aber ich denke das mein weg funktnieren dürfte !
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

so hier ist eine teillösung es müssten noch einige kleinerer bugs behoben werden, aber das prinzip funktniert:

Code: Alles auswählen

procedure TForm1.listePaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
var
  item:pobj;
  r:TRect;
begin
  item:=liste.GetNodeData(node);
  r:=sender.GetDisplayRect(node,Column,False,False);
  TargetCanvas.Pen.Style:=psClear;
 
  TargetCanvas.Rectangle(r);
  // wichtig sonst geht es nicht
  r.top:=0; r.Bottom:=20;
  item.t:=True;
 
 
  if (Column = 1)  then begin
    TargetCanvas.TextOut(r.left,r.top,item.name);
  end;
 
end;
 
procedure TForm1.listeScroll(Sender: TBaseVirtualTree; DeltaX,DeltaY: Integer);
begin
  // damit der Header beim scrollen neugezeichnet wird !
  sender.Invalidate;
end;
 
procedure TForm1.listeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
  item:pobj;
  test:PRect;
begin
  item:=liste.GetNodeData(node);
  // es soll nur gezeichnet werden wenn es nicht von onpaintitem ausgelöst wurde
  if (Column = 1) and (item.t = false) then begin
    Celltext:=item.name
  end
  else
    Celltext:=' ';
 
 
  item.t:=False;
end;


es gibt noch ein paar grafische Fehler, z.b. wenn der scrollbalken gans lings ist, oder wenn mit der Maus über die VST gegangen wird !
MFG
Michael Springwald

Antworten