Autor Beitrag
Prinzz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 28.10.05 12:59 
Hallo Leute,

hab ein sehr seltsames Problem:
Hab eine TTreeView, in der verschiedene Getränke mit Preisen in Unterkategorieren angezeigt werden. Die Unterkategorien können auf und zugeklappt werden.
Sind nur wenige Getränke in der Liste oder sind die Unterkategorien zugeklappt, so dass alle Infos in die TreeView reinpassen, gibt es kein Problem, sind jetzt aber mehr nodes, als in ein Fenster reinpassen, kommt eine Scrollbar, auf die ich ja keinen direkten Einfluss habe. Sobald ich jetzt aber die TreeView anklicke verschwindet diese Scrollbar, sie wird nicht mehr angezeigt, wenn ich mit der Maus draufklicke bzw. gedrückt halte ist sie da, verschwindet aber direkt wieder, wenn ich ein anderes Programm in den Fordergrund hole, so dass meins verdeckt ist und dann nochmal meines fokusiere erscheint die Scrollbar wieder, sie wird neugezeichnet, aber sobald ich mit der TreeView arbeite ist sie wieder weg.

Habs auch schon manuell mit ShowScrollBar(TProdukte.handle,SB_VERT,true); versucht, aber genau das gleiche Problem, ab und zu sind auch teile der Scrollbar zu sehen, das Problem ist, sie wird einfach nicht neugezeichnet, auch TProdukte.repaint oder refresh hilft nix...

Habt ihr irgendeine Idee was man da machen kann, brauche ganz schnell Hilfe!

Vielen Dank im Vorraus, Gruß Tobi
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 28.10.05 14:29 
Hallo,

arbeitest Du in dem Code mit BeginUpdate und EndUpdate?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Prinzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Fr 28.10.05 14:33 
BeginUpdate und EndUpdate hab ich auch schon versucht, wusst aber nicht wirklich wo ichs hinschreiben soll, hab dann bisschen rumprobiert, aber war kein Unterschied...
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 28.10.05 14:59 
Hallo,

hast Du denn das BeginUpdate / EndUpdate in deinem Code genutzt als der Fehler auftrat?

Man kann ohne weitere Informationen oder Code von Dir nicht mehr dazu sagen.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Prinzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Sa 29.10.05 11:36 
ausblenden volle Höhe Delphi-Quelltext
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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
procedure THauptForm.TProdukteCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var t: TTreeNode;
    nummer: integer;
begin

  with (sender as TTreeView).Canvas do
  begin
    font.name:='Arial';
    font.Color:=clblack;
    font.size:=8;
    font.Style:=[];
    brush.Color:=clwhite;
    FillRect(node.Displayrect(false));
    if (node=TProdukte.Selected) then
    begin
      font.Color:=clblack;
      brush.Color:=$00d9ffff;
      FillRect(node.Displayrect(true));
    end;
    if node.count=0 then
    begin
        TextOut(TProdukte.Width-canvas.TextWidth('['+floattostrF(produkt[pos_rechnen(node)].Preis/100,fffixed,18,2)+' €'+']   ')-20,node.displayrect(true).top,'['+floattostrF(produkt[pos_rechnen(node)].Preis/100,fffixed,18,2)+' €'+']');
      font.Style:=[];
    end;


    if node.Count>0 then
    begin
      font.Style:=[fsbold,fsitalic];
      font.Color:=clmaroon;
    end else
    if (cdsHot in state) then
    begin
        font.Color:=clmaroon;
        font.Style:=[fsunderline];
    end else
    begin
      font.Color:=clnavy;
      font.Style:=[];
    end;
    TextOut(node.displayrect(true).left,node.displayrect(true).top,node.text);




    if TProdukte.Selected<>nil then
    begin
      t:=TProdukte.Selected;
      if (t.Count=0)  and (t<>nilthen
      begin
        EPreis.caption:='  '+floattostrF(produkt[ausw.Pro].Preis/100,fffixed,18,2)+' €'+' {'+produkt[ausw.Pro].AlkWert+' Punkte}';


        if focus<>'TProdukte' then PAnz.Hide
        else begin

          if PAnz.Visible=false then PAnz.Show;

          nummer:= Pos_Rechnen(t);
          if PAnz.Tag<>nummer then
          begin
            PAnz.Tag:=nummer;
            EAnz.Text:='1';
          end;



          PAnz.Top:=TProdukte.Top + t.displayrect(true).top - 1;
          PAnz.Left:=TProdukte.Left + t.displayrect(true).right + 10;
        end;
      end else
      begin
        EPreis.Caption:='---';
        if PAnz.Visible=true then
        begin
          PAnz.Hide;
          TProdukte.SetFocus;
        end;
      end;
    end else
    begin
      EPreis.Caption:='---';
      if PAnz.Visible=true then
        begin
          PAnz.Hide;
          TProdukte.SetFocus;
        end;
    end;

  end;
end;
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 29.10.05 17:54 
Hallo,

in der DrawItem-Prozedur kann ich keine Fehler feststellen die Dein Problem verursachen könnten.
Beeinflusst Du die Scrollbar in irgendeiner Form?
Was wird in anderen Ereignissen des TreeView ausgeführt?

Noch ein Paar Anmerkungen zu Deinem Code:
ausblenden Delphi-Quelltext
1:
2:
3:
TextOut(TProdukte.Width-canvas.TextWidth(....
//besser das, wegen der Scrollbar?
TextOut(TProdukte.ClientWidth-canvas.TextWidth(

ist focus eine globale Variable?, da könntest Du auch eventuell etwas ändern:
ausblenden Delphi-Quelltext
1:
2:
3:
if focus<>'TProdukte' then PAnz.Hide
//so > 
if ActiveControl <> TProdukte then PAnz.Hide

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Prinzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: So 30.10.05 02:46 
Danke schonmal für die Tipps und die nette Hilfe!
Nee, ich beeinflusse die Scrollbar überhaupt nicht, sie wird auch nicht von irgendwelchen Fenstern verdeckt, sie kommt ja auch automatisch und wird auch gezeichnet, nur sobald ich die TreeView anklicke ist sie verschwunden, nur optisch, ist halt einfach weiß anstatt scrollbar, wenn ich sie anklicke taucht sie zum teil nochmal auf!? Hätte mir ja gedacht, dass es vielleicht ein Fehler der Komponente ist, aber wundert mich, dass sonst noch niemand das Problem hatte, also muss es doch irgendwie an meinem Code liegen!? Theoretisch geht mein Programm auch so, aber solche Schönheitsfehler müssen nicht sein finde ich...


Nachtrag:
Hab grad rausgefunden, woran es liegt:
Ich hatte ein kleines Panel über dem TreeView liegen (übrigens nicht über der Scrollbar), das sich mit dem Fokus verschoben hat, dieses hab ich jetzt neben das Treeview verschoben und jetzt bleibt die Scrollbar wenigstens bei normalem Betrieb da.
Sie wird aber immer noch nicht neugezeichnet, wenn ich ein anderes Windows-Fenster drüberlege oder eben das kleine Fenster drüber haben möchte, das sollte nämlich eigentlich schon da hin!?

Ich werd hier noch verrückt... :-)
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 30.10.05 12:55 
Hallo,
user profile iconPrinzz hat folgendes geschrieben:
Ich werd hier noch verrückt... :-)

immer gelassen bleiben 8) und Fehler suchen.
    Alle Codeblöcke die sich mit dem TreeView beschäftigen,
    auskommentieren und dann nach und nach wieder aktivieren,
    bis Du den Fehler gefunden hast.
Eventuell trifft das TTreeView, Borderstyle geändert, Scrollbars verschwinden auch bei Dir zu.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Prinzz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: So 30.10.05 13:22 
Titel: Juhu!!
Super, danke!!!
Der Link war genau das, was ich gesucht habe, was dort stand hat mir zwar nicht geholfen (hab borderStyle auf bsSingle umgestellt und war immer noch wie vorher) aber ich hab dann dort ein bisschen mit Werten rumgespielt und folgendes hat geklappt:

borderStyle = bsNone;
borderWidth = 1 liefert diesen bescheuerten Fehler

borderWidth = 0 löst das Problem!!!!!

;-)

Da ich in dem anderen Forum nicht angemeldet bin und dort das Problem ja anscheinend auch nicht gelöst wurde würd ich dich bitten, wenns nicht zu viel Umstände bereitet, das dort hinzuschreiben...

Vielen Dank für die Hilfe!! Gruß Tobi