VST: bei mausbeweung soll nicht neugezeichnet werden !
-
- Lazarusforum e. V.
- Beiträge: 7192
- 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 !
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) !
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
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
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...)
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
Michael Springwald
-
- 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:
wie solln das deiner meinung nach gehen ?
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...)
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/
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
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 !
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
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
so hier ist eine teillösung es müssten noch einige kleinerer bugs behoben werden, aber das prinzip funktniert:
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 !
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;
MFG
Michael Springwald
Michael Springwald