![]() |
AW: Scrollbar Design
Delphi-Quellcode:
Ungetestet, gefunden bei SO. Damit ist sollte das Speicherleck zu sein.
{ TMyScrollBar }
//****************************************************************************** constructor TMyScrollBar.Create(AOwner: TComponent); begin inherited; FHBrush := CreateSolidBrush(ColorToRGB(FBackColor)); end; //****************************************************************************** destructor TMyScrollBar.Destroy; begin DeleteObject(FHBrush); inherited; end; //****************************************************************************** procedure TMyScrollBar.SetBackColor(const Value: Tcolor); begin FBackColor := Value; DeleteObject(FHBrush); FHBrush := CreateSolidBrush(ColorToRGB(FBackColor)); end; //****************************************************************************** procedure TMyScrollBar.WMCtlColor(var Message: TWMCtlColorScrollbar); begin Message.Result := FHBrush; end; Bereichsprüfungsfehler? Zeige doch mal auch was Du in der Message Procedure anstellst ?! Bei mir klappen alle Varianten. |
AW: Scrollbar Design
Zitat:
Die geht nämlich mit den VCL-Stilen. Die interne von der TListBox hat ja ein Fehler wie ich versucht habe hier zu beschreiben. Es war etwas schwer die TScrollBar nun mit der TListBox zu verbinden. Da waren dann ja einige Berechnungen nötig. Ein Teil davon...
Code:
... halt damit die ScrollBar richtig passt zum Inhalt der TListBox.
I1 := Floor(LBR.ClientHeight / LBR.ItemHeight);
I2 := ceil(LBR.Count / I1); I3 := ceil(I2 / lbr.Columns); ScrollBox.Max := i3*10; usw. Musste dann hier und da ein paar Prüfungen machen (beim Maximieren, Resize, Tastatur). Aber ich sag ja nicht, dass deine DLL schlecht ist. Ist ja schön, wenn du so etwas zur Verfügung stellst. Mir ist's einfach zu groß. Da hätte ich dann einfach kein Überblick mehr. Und den habe ich gerne, was sowieso schwer ist, wenn das Listing wächst und wächst :) Michael |
AW: Scrollbar Design
Zitat:
Das mit DeleteObject hatte ich sowieso schon gemacht. Das mit dem Fehler "Bereichsprüfung"... es war noch schlimmer und das alles lag am VCL-Stil. Meine Anwendung ist ja schon abgestürzt, nur wenn ich ein TEdit hinzufügte. Ich hatte mir nämlich ein VCL-Stil nur mit den ScrollBar-Daten gemacht. Das war dann einfach zu wenig und hier und da meckerte dann Delphi. Wichtig war StyleElements für die Komponenten entsprechend abzustellen. Egal jetzt... mit einer TScrollBar geht es jetzt. Michael |
AW: Scrollbar Design
Lösungswege sind ja nicht immer so wie man es hofft, erwartet... irgendwie klappt es dann oder auch nicht.
Mein Weg ist nun geschafft (hoffe ich *lach)... aber mal noch ein Danke an EWeiss und KodeZweg für die Hilfeleistung. Michael |
AW: Scrollbar Design
Zitat:
Zitat:
Mehr war es nämlich nicht.
Delphi-Quellcode:
Das gesamte Projekt hat gerade mal 145 Zeilen.. inkl. class(TForm), uses und der andere Quatsch für die VCL
constructor TSubclassedList.Create(Owner: TComponent);
begin inherited; List := TInterfaceList.Create; end; destructor TSubclassedList.Destroy; begin List.Free; HookedScroolBar_Destroy; inherited; end; procedure TForm1.FindSubclassed(Comp: TWinControl; Config: TStrings; L: TSubclassedList = nil); var i: Integer; begin if Config.Values['Path'] = '' then Config.Values['Path'] := ExtractFilePath(ParamStr(0)); if not Assigned(L) then L := TSubclassedList.Create(Comp); for i := 0 to Comp.ControlCount - 1 do begin if Comp.Controls[i] is TCustomMemo then begin S := HookedScroolBar_Create; L.List.Add(S); // Vertikale ScrollBar Images if Config.Values['VTrack'] > '' then S.VTrack := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VTrack']); if Config.Values['VBtnUp'] > '' then S.VBtnUp := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VBtnUp']); if Config.Values['VThumb'] > '' then S.VThumb := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VThumb']); if Config.Values['VBtnDown'] > '' then S.VBtnDown := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VBtnDown']); // Horizontale ScrollBar Images if Config.Values['HTrack'] > '' then S.HTrack := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['HTrack']); if Config.Values['HBtnLeft'] > '' then S.HBtnLeft := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['HBtnLeft']); if Config.Values['HThumb'] > '' then S.HThumb := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['HThumb']); if Config.Values['HBtnRight'] > '' then S.HBtnRight := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['HBtnRight']); // Size Images if Config.Values['Sizer'] > '' then S.Sizer := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['Sizer']); // S.Connect(Handle, Memo1.Handle); end else if Comp.Controls[i] is TDirectoryListBox then begin S := HookedScroolBar_Create; L.List.Add(S); // Vertikale ScrollBar Images if Config.Values['VTrack'] > '' then S.VTrack := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VTrack']); if Config.Values['VBtnUp'] > '' then S.VBtnUp := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VBtnUp']); if Config.Values['VThumb'] > '' then S.VThumb := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VThumb']); if Config.Values['VBtnDown'] > '' then S.VBtnDown := S.CreateImageFromFile(Config.Values['Path'] + Config.Values['VBtnDown']); // S.Connect(Handle, DirectoryListBox1.Handle); end; FindSubclassed(TWinControl(Comp.Controls[i]), Config, L); end; end; procedure TForm1.FormCreate(Sender: TObject); var Config: TStringList; begin Config := TStringList.Create; try Config.Values['Path'] := ExtractFilePath(ParamStr(0)) + 'ScrollBarSkin\'; // Vertikale ScrollBar Images Config.Values['VTrack'] := 'VTrack.png'; Config.Values['VBtnUp'] := 'VBtnUp.png'; Config.Values['VThumb'] := 'VThumb.png'; Config.Values['VBtnDown'] := 'VBtnDown.png'; // Horizontale ScrollBar Images Config.Values['HTrack'] := 'HTrack.png'; Config.Values['HBtnLeft'] := 'HBtnLeft.png'; Config.Values['HThumb'] := 'HThumb.png'; Config.Values['HBtnRight'] := 'HBtnRight.png'; // Size Images Config.Values['Sizer'] := 'Sizer.png'; // FindSubclassed(Self, Config); finally Config.Free; end; end; Aber ja doch zu groß. Aber gut hast es ja zurecht gefummelt. :roll: gruss |
AW: Scrollbar Design
Zitat:
Aber paar .pas Dateien sah ich... kurz geschaut... hier und da... gleich erst mal "0 Plan" gedacht *lach Stelle es dir mal anders rum vor. Du kennst ja dein Projekt. So im ersten Moment wenn man da ins RAR-Archiv schaut... Ich habe das Archiv noch nicht gelöscht und kann ja noch mal drüber schauen was es so macht. Michael |
AW: Scrollbar Design
Zitat:
Egal! Mach wie du willst. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz