Autor Beitrag
csigg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Do 31.03.05 12:20 
ich habe eine TListView mit einem hintergrundbild. Sobald ich allerdings in der TListview scrolle, wiederholt sich das Bild immer, d.h. es ist dann immer der Umriss sichtbar. So total .... aus. Weiss jemand wie man das beheben kann??
fvolk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: Do 31.03.05 12:49 
Wenn du uns noch verrätst, wie du das Hintergrundbild in die ListView bekommen hast, dann können wir dir vielleicht sogar helfen. (Die Sache mit der Glaskugel mal wieder.)

Standardmäßig geht das nämlich nicht mit den von dir angegebenen Delphi-Versionen.

Ich vermute daher, dass der Fehler in der Zeichenroutine begraben liegt.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 31.03.05 12:56 
user profile iconfvolk hat folgendes geschrieben:
Standardmäßig geht das nämlich nicht mit den von dir angegebenen Delphi-Versionen


Und weshalb sollte es nicht gehen? Im Demosordner ist sogar ein ausführlicheres Beispiel zum Thema Ownerdraw ;)

AXMD
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Do 31.03.05 13:05 
wo find ich den demos Ordner, hab grad nur D5, also ein teil meines Codes:
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:
procedure Tfrm_Main.prc_allCustomDraw(Senderx: TCustomListView; x,y:Integer);
var
  bildle : TBitMap;
  i:integer;
begin
  i:= (Senderx as TListview).Tag-1;

  bildle := TBitmap.Create;

  try
      try
        bildle.LoadFromFile(bildpath[i]);
      except
        on EFOpenError do
        begin
          MessageDlg('Die zugeordenten Raumbilder konnten nicht gefunden werden.',
                      mtError,[mbOK],0);
          Application.Terminate;
        end
      end;
      with bildle do begin
      (Senderx as TListView).Canvas.Draw(x,y,bildle);
      (Senderx as TListView).Color := Bildle.Canvas.Pixels[0,0];
      case (Senderx as TListview).Tag of
        1:  lbSitzung1.Color := Bildle.Canvas.Pixels[0,0];
        2:  lbSitzung2.Color := Bildle.Canvas.Pixels[0,0];
        3:  lbSitzung3.Color := Bildle.Canvas.Pixels[0,0];
        4:  lbSitzung4.Color := Bildle.Canvas.Pixels[0,0];
        5:  lbSitzung5.Color := Bildle.Canvas.Pixels[0,0];
        6:  lbSitzung6.Color := Bildle.Canvas.Pixels[0,0];
      end;
      end;
  finally
       bildle.Free;
  end;
end;

zweiter Teil
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:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
procedure Tfrm_Main.prc_parametersetzen;
var Anwesendcolor, Abwesendcolor :TColor;
    sqlstatement, Themenflag:String;
    i,animationsdauer:Integer;
begin
//Themen im Standplan anzeigen oder nicht?
//----------------------------------------------------------------------
sqlstatement := 'SELECT THEMENANZEIGEN FROM DMESSE';

with dmMesse.qryparameter do
begin
  Close;
  SQL.CLEAR;
  SQL.ADD(sqlstatement);
  Open;
  Themenflag := FieldByName('ThemenAnzeigen').asstring;
end;


if Themenflag = 'J' then
  begin
  frm_Verwalt.cbThemenAnzeigen.Checked := true;
  end
else
begin
  frm_Verwalt.cbThemenAnzeigen.Checked := false;
end;

//dauer der Markierung default 30 sek.
//----------------------------------------------------------------------
sqlstatement := 'SELECT ZEITMARKIERUNG FROM DMESSE WHERE ID=1';
with dmMesse.qryParameter do
begin
  Close;
  SQL.Clear;
  SQL.Add(sqlstatement);
  Open;
  animationsdauer := FieldByName('ZEITMARKIERUNG').asinteger;
end;
tmrMarkLoeschen.Interval := animationsdauer * 1000;
frm_Verwalt.meAnimationsdauer.Text := inttostr(animationsdauer);


//dauer der "animation" roter markierungsrahmen  -> prc_sucheMitarbeiter
//----------------------------------------------------------------------
sqlstatement := 'SELECT ANIMATIONSSCHRITTE FROM DMESSE';

with dmMesse.qryParameter do
begin
  Close;
  SQL.Clear;
  SQL.Add(sqlstatement);
  Open;
  Animationsschritte := FieldByName('Animationsschritte').asinteger;
end;
frm_Verwalt.meAnimationsschritte.Text := inttostr(Animationsschritte);


//Pfade zu den Raum-Bildern
//----------------------------------------------------------------------
setlength(bildpath,6);

sqlstatement := 'SELECT bild FROM Ort WHERE ORTNR in (1,2,3,4,5,6)';

with dmMEsse.qryParameter do
begin
  Close;
  SQL.Clear;
  SQL.Add(sqlstatement);
  Open;
  First;
  i:=0;

  while not eof do
  begin
    bildpath[i]:= fieldbyname('Bild').asstring;
    i:=i+1;
    Next;
  end;

  with frm_Verwalt do
  begin
    try
    begin
      Image1.Picture.LoadFromFile(bildpath[0]);
      Image2.Picture.LoadFromFile(bildpath[1]);
      Image3.Picture.LoadFromFile(bildpath[2]);
      Image4.Picture.LoadFromFile(bildpath[3]);
      Image5.Picture.LoadFromFile(bildpath[4]);
      Image6.Picture.LoadFromFile(bildpath[5]);
    end
    except
      on EFOpenError do
      begin
        Image1.Picture.LoadFromFile(GetCurrentDir + '\bmp\Raum1.bmp');
        Image2.Picture.LoadFromFile(GetCurrentDir + '\bmp\Cube2.bmp');
        Image3.Picture.LoadFromFile(GetCurrentDir + '\bmp\Cube3.bmp');
        Image4.Picture.LoadFromFile(GetCurrentDir + '\bmp\Cube4.bmp');
        Image5.Picture.LoadFromFile(GetCurrentDir + '\bmp\Cube5.bmp');
        Image6.Picture.LoadFromFile(GetCurrentDir + '\bmp\Raum6.bmp');
      end;
     end;

  end;

end;

//Farbwerte
//----------------------------------------------------------------------
with dmMEsse.TDMesse do
begin
  Open;
  Anwesendcolor := StringToColor(fieldbyname('ANWESEND').asstring);
  Abwesendcolor := StringToColor(fieldbyname('ABWESEND').asstring);
  //Sitzunglabelcolor := StringToColor(fieldbyname('SITZUNGLABEL').asstring);
  close;
end;



  frm_Main.Color := Anwesendcolor;    //$0080c0e0;
  lbAbwesend.Color := Abwesendcolor; //$00a0c0e0;
  lbAnwesend.Color := Anwesendcolor;
  lvAbwesend.Color :=  Abwesendcolor; //$00a0c0e0;
  lvAnwesendTop.Color := Anwesendcolor;
  lvAnwesendLeft.Color := Anwesendcolor;
  lvAnwesendBottom.Color := Anwesendcolor;
  lvAnwesendTopRight.Color := Anwesendcolor;
  lvAnwesendBottomRight.Color := Anwesendcolor;
  lvaufdemStand.Color := Anwesendcolor;

  lbSitzung1.Color := 12615680;
  //lbSitzung1.Width:= lvRaum1.Width;
  lbSitzung2.Color := 12615680;
  //lbSitzung2.Width := lvCube2.width;
  lbSitzung3.Color := 12615680;
  //lbSitzung3.width := lvCube3.width;
  lbSitzung4.Color := 12615680;
  //lbSitzung3.Width := lvCube4.Width;
  lbSitzung5.Color := 12615680;
  //lbSitzung5.Width := lvCube5.Width;
  lbSitzung6.Color := 12615680;
  //lbSitzung6.Width := lvRaum6.Width;

  shRahmen.parent := lvaufdemStand;
  shRahmen.Pen.Color := clred;
  shRahmen.Pen.Width := 3;
  shRahmen.Brush.Style := bsclear;
  shRahmen.Visible := false;
end;

Ich kann euch leider auch nicht soviel dazu sagen, das Programm ist von meinem Vorgänger, ich darf nur die Fehler rausmachen :)
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 31.03.05 13:26 
user profile iconcsigg hat folgendes geschrieben:
wo find ich den demos Ordner, hab grad nur D5


Moment... warum steht in deinem Profil dann Delphi 6 :gruebel: Hatte mich eher daran orientiert. Ab D6 findest du die Demos im Delphiordner unter "Demos" ;)

AXMD
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Do 31.03.05 13:30 
daheim hab ich Delphi6, beim arbeiten Delphi5, um diese Zeit bin ich beim arbeiten, aber ich werd mal nach dem Ordner suchen, vielleicht gibt es den bei mir ja auch.

also ich hab nen Ordner Demos bei mir gefunden, kann mir jemand sagen welches Demo das ist??
Gibts da ne Doku oder sowas ähnliches dazu??

Moderiert von user profile iconAXMD: Topics zusammengefasst
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 31.03.05 13:36 
Hab ich ja oben geschrieben: Die Demo heißt "Ownerdraw"

AXMD
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Do 31.03.05 13:54 
sorry, den hab ich überlesen, den gibts bei mir leider nicht.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 31.03.05 14:01 
user profile iconcsigg hat folgendes geschrieben:
sorry, den hab ich überlesen, den gibts bei mir leider nicht.


Kann sein; in Delphi 6 und 7 ist er sicher dabei

AXMD
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Do 31.03.05 14:05 
weiss unter Delphi5 niemand wie es vielleicht gehen könnte??
fvolk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: Do 31.03.05 14:21 
Sorry, hab' mich ein wenig unklar ausgedrückt. Ich meinte, dass in der Komponenten TListView keine Eigenschaft vorhanden ist, die ein Hintergrund darstellt.

Zurück zu deinem Problem. Ich wollte das gerade mal nachbauen, verstehe aber noch nicht ganz, woher x und y in deiner Zeichenroutine prc_allCustomDraw(Senderx: TCustomListView; x,y:Integer); herkommen.

(ListView.OwnerDraw auf true, hast du sonst noch was verändert?)

Falls du jedoch einfach nur ein Hintergrundbild in der ListView haben willst und nicht etwas für die einzelnen Icons/Einträge, dann kannst du OwnerDraw auf false setzen und einfach OnCustomDraw abfangen und das Bild bei 0, 0 aufs Canvas der ListView malen.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Do 31.03.05 14:30 
ok, danke.
ich werd dein Vorschlag mal ausprobieren.
Kann dir im Moment nix näheres zu dem Programm sagen, da ich wie gesagt selber nicht wirklich den Plan davon habe.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Do 31.03.05 14:34 
user profile iconcsigg hat folgendes geschrieben:
Kann dir im Moment nix näheres zu dem Programm sagen, da ich wie gesagt selber nicht wirklich den Plan davon habe.


Achja, immer gut :gruebel: Woher hast du den Code überhaupt? Btw. ist die Delphihilfe mit den richtigen Suchbegriffen sehr gesprächig betreffs OwnerDraw

AXMD
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Do 31.03.05 14:41 
ich mach grad ein praktikum, und mein vorgänger hat mit diesem Programm angefangen, und ich darf´s fertig machen
csigg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 706

WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
BeitragVerfasst: Di 05.04.05 10:28 
eine andere Prozedur ruft diese auf, und übergibt den x,y Wert.
jetz hab ich aber noch das Problem, sobald in der TListView mehr Objekte sind, als Platzhaben, erscheint ein Scrollbalken.
Wenn ich diesen Balken mit der Maus nach unten ziehe klappt alles ganz gut.
Wenn ich aber mit dem Scrollrad runterscrolle zeichnet sich da Bild jedesmal neu, ohne "seinen Vorgänger" zu löschen.
Wie kann ich das Bild nicht neu zeichen lassen, oder ihn das Vorgängerbild einfach löschen lassen??