| Autor |
Beitrag |
csigg
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: 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
      
Beiträge: 203
Win XP (Home & Pro)
Delphi 2005 Pers
|
Verfasst: 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
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 31.03.05 12:56
fvolk 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 
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: Do 31.03.05 13:05
wo find ich den demos Ordner, hab grad nur D5, also ein teil meines Codes:
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
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 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;
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);
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);
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;
with dmMEsse.TDMesse do begin Open; Anwesendcolor := StringToColor(fieldbyname('ANWESEND').asstring); Abwesendcolor := StringToColor(fieldbyname('ABWESEND').asstring); close; end;
frm_Main.Color := Anwesendcolor; lbAbwesend.Color := Abwesendcolor; lbAnwesend.Color := Anwesendcolor; lvAbwesend.Color := Abwesendcolor; lvAnwesendTop.Color := Anwesendcolor; lvAnwesendLeft.Color := Anwesendcolor; lvAnwesendBottom.Color := Anwesendcolor; lvAnwesendTopRight.Color := Anwesendcolor; lvAnwesendBottomRight.Color := Anwesendcolor; lvaufdemStand.Color := Anwesendcolor;
lbSitzung1.Color := 12615680; lbSitzung2.Color := 12615680; lbSitzung3.Color := 12615680; lbSitzung4.Color := 12615680; lbSitzung5.Color := 12615680; lbSitzung6.Color := 12615680; 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
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 31.03.05 13:26
csigg hat folgendes geschrieben: | | wo find ich den demos Ordner, hab grad nur D5 |
Moment... warum steht in deinem Profil dann Delphi 6  Hatte mich eher daran orientiert. Ab D6 findest du die Demos im Delphiordner unter "Demos"
AXMD
|
|
csigg 
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: 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 AXMD: Topics zusammengefasst
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 31.03.05 13:36
Hab ich ja oben geschrieben: Die Demo heißt "Ownerdraw"
AXMD
|
|
csigg 
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: Do 31.03.05 13:54
sorry, den hab ich überlesen, den gibts bei mir leider nicht.
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 31.03.05 14:01
csigg 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 
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: Do 31.03.05 14:05
weiss unter Delphi5 niemand wie es vielleicht gehen könnte??
|
|
fvolk
      
Beiträge: 203
Win XP (Home & Pro)
Delphi 2005 Pers
|
Verfasst: 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 
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: 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
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Do 31.03.05 14:34
csigg 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  Woher hast du den Code überhaupt? Btw. ist die Delphihilfe mit den richtigen Suchbegriffen sehr gesprächig betreffs OwnerDraw
AXMD
|
|
csigg 
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: 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 
      
Beiträge: 706
WIn XP, Win NT, Win2000, Suse8.0
Delphi 5, Delphi 6
|
Verfasst: 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??
|
|