Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   SubClassed Control (https://www.delphipraxis.net/161368-subclassed-control.html)

EWeiss 30. Jun 2011 11:08


SubClassed Control
 
Liste der Anhänge anzeigen (Anzahl: 65533)
Projekt entfernt..

EWeiss 30. Jun 2011 16:18

AW: SubClassed ScrollBar
 
Da keiner antwortet tue ich es selbst ;)
Neue Version Oben nun werden die Bitmaps gerendert

gruss

EWeiss 30. Jun 2011 20:37

AW: SubClassed ScrollBar
 
Fertig!
HScroll und Sizer addiert..

gruss

Thom 30. Jun 2011 20:57

AW: SubClassed ScrollBar
 
:thumb:
Toll! Läuft unter XP ohne Probleme.
Ist auch eine super Idee, den Quelltext im Memo der Exe unterzubringen! :-D

EWeiss 30. Jun 2011 21:00

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109341)
:thumb:
Toll! Läuft unter XP ohne Probleme.
Ist auch eine super Idee, den Quelltext im Memo der Exe unterzubringen! :-D

Jo weil gesubclassed gehen alle originalen funktionen der Memo-ScrollBar direkt an die SkinnedBar.
also MouseWheel usw..

gruss

lbccaleb 30. Jun 2011 21:33

AW: SubClassed ScrollBar
 
Wie sieht es aus, mit größenänderung des Hauptfensters? Wenn man das Fenster in der größe ändert, dann bleiben die Bars noch im Ausgangs zustand...

EWeiss 30. Jun 2011 21:35

AW: SubClassed ScrollBar
 
Zitat:

Zitat von lbccaleb (Beitrag 1109348)
Wie sieht es aus, mit größenänderung des Hauptfensters? Wenn man das Fenster in der größe ändert, dann bleiben die Bars noch im Ausgangs zustand...

Denke habe das schon richtig gemacht :)
Wenn die Memo sich beim resitz des Fensters vergrößert setzt sich natürlich die Scrollbar
an die richtige position so wie es sein muss ;)

Das habe ich schon abgefangen.

gruss

Thom 30. Jun 2011 21:41

AW: SubClassed ScrollBar
 
Email ist angekommen - ich schau's mir gerade an.
Zu Deinen Bemerkungen: Ja - geht alles klar. Da hast Du mein vollstes Verständnis!

EWeiss 30. Jun 2011 21:43

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109351)
Email ist angekommen - ich schau's mir gerade an.
Zu Deinen Bemerkungen: Ja - geht alles klar. Da hast Du mein vollstes Verständnis!

Das ist fein.. ;)

gruss

Thom 30. Jun 2011 22:18

AW: SubClassed ScrollBar
 
Liste der Anhänge anzeigen (Anzahl: 1)
Problem gefunden/gelöst:
Delphi-Quellcode:
function THookedScrollbar.StoreHorizontal(WinHandle: HWND): Boolean;
begin
  //...
  Result:=HScrBar.rgstate[0] and STATE_SYSTEM_INVISIBLE=0;
end;

function THookedScrollbar.StoreVertical(WinHandle: HWND): Boolean;
begin
  //...
  Result:=VScrBar.rgstate[0] and STATE_SYSTEM_INVISIBLE=0;
end;
Allerdings habe ich noch einen kleinen Fehler gefunden:
Anhang 34538
Es sieht so aus, als ob die Scrollbar um jeweils einen Pixel nach rechts und unter verschoben wäre. Könnte das sein?

P.S.: Das ist ja ein richtig umfangreiches Projekt und einer Menge Arbeit, die da drin steckt. :shock:
Ganz tolle Arbeit! :hello:

EWeiss 30. Jun 2011 22:21

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109357)
Problem gefunden/gelöst:
Delphi-Quellcode:
function THookedScrollbar.StoreHorizontal(WinHandle: HWND): Boolean;
begin
  //...
  Result:=HScrBar.rgstate[0] and STATE_SYSTEM_INVISIBLE=0;
end;

function THookedScrollbar.StoreVertical(WinHandle: HWND): Boolean;
begin
  //...
  Result:=VScrBar.rgstate[0] and STATE_SYSTEM_INVISIBLE=0;
end;
Allerdings habe ich noch einen kleinen Fehler gefunden:
Anhang 34538
Es sieht so aus, als ob die Scrollbar um jeweils einen Pixel nach rechts und unter verschoben wäre. Könnte das sein?

Das ist ohne weiteres möglich meine Augen "Sorry" sind nicht mehr die besten.

werde es mal einbauen und schaun ob es geht. ;)
Mit Quelltext geht es doch besser :) als mit ner :glaskugel:

EDIT:
Was hast mit State gemacht?
Auf der Basis wird es ja nicht mehr gebraucht.. Oder? ;)


gruss

Thom 30. Jun 2011 22:36

AW: SubClassed ScrollBar
 
Nö. Ist unter den Tisch gefallen... :lol:

EWeiss 30. Jun 2011 22:42

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109360)
Nö. Ist unter den Tisch gefallen... :lol:

Funktioniert soweit..
Naja kleine Probleme findet man immer noch irgend wo.
Hab mal mit meiner Screenlupe geschaut unter Win7 stimmen die Koordinaten exakt.

Zitat:

P.S.: Das ist ja ein richtig umfangreiches Projekt und einer Menge Arbeit, die da drin steckt.
Ganz tolle Arbeit!

Danke für die Blumen.. Jup das macht sich nicht von alleine
und als Hobby Schreiber hab ich das schon gut hinbekommen denk ich mal.

EDIT:
Solltest du vielleicht noch ändern!
Es macht keinen Sinn den Rect zu kopieren wenn die ScrollBar nicht aktiv ist.

Delphi-Quellcode:
function THookedScrollbar.StoreHorizontal(WinHandle: HWND): Boolean;
var
  State: Boolean;
begin

  // Lese aktuelle Bar Parameter
  HScrBar.cbSize := SizeOf(HScrBar);
  GetScrollBarInfo(WinHandle, integer(OBJID_HSCROLL), HScrBar);

  State := HScrBar.rgstate[0] and STATE_SYSTEM_INVISIBLE = 0;
  if State then
    // kopiere den aktuellen Rect zur späteren bearbeitung
    CopyRect(HorzRect, HScrBar.rcScrollBar);

  Result := State;

end;

gruss

Thom 30. Jun 2011 22:54

AW: SubClassed ScrollBar
 
Zitat:

Zitat von EWeiss (Beitrag 1109361)
[...] unter Win7 stimmen die Koordinaten exakt.

Hmm... Merkwürdig... :gruebel:

Zitat:

Zitat von EWeiss (Beitrag 1109361)
Jup das macht sich nicht von alleine und als Hobby Schreiber hab ich das schon gut hinbekommen denk ich mal.

Auf jeden Fall! Da können sich diverse Schaff-Ich-Das-Abi-Oder-Nicht-Programme gleich ein paar Scheiben abschneiden. :wink:

P.S.: Ja - da hast Du Recht. Hab' die Änderung übernommen.

EWeiss 30. Jun 2011 22:58

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109363)
Zitat:

Zitat von EWeiss (Beitrag 1109361)
[...] unter Win7 stimmen die Koordinaten exakt.

Hmm... Merkwürdig... :gruebel:

Warum merkwürdig ?
Denke das ist normal die ScrollBars sind wohl etwas Größer ausgefallen.

Zitat:

P.S.: Ja - da hast Du Recht. Hab' die Änderung übernommen.
OkiDoki ;)

PS:
Du kannst aber mit GetOS prüfen welches OS verwendet wird und dem entsprechend
die Function ResizeScrollBarPos erweitern.
Alles was mehr als WinXp ist so belassen..

gruss

Thom 30. Jun 2011 23:21

AW: SubClassed ScrollBar
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1109364)
Denke das ist normal die ScrollBars sind wohl etwas Größer ausgefallen.

Aha: Da liegt der Hase im Pfeffer. Ich habe mal auf meinem Rechner den Scrollbars eine XXL-Größe mit einer Breite von 30 Pixeln verpaßt:
Anhang 34539

Damit offenbart sich ein Problem: Deine Scrollbars funktionieren nur dann richtig, wenn nicht irgendwer seinen Rechner "umgestellt" hat. Wäre es da nicht eventuell günstiger, die Darstellung nicht über Bilder zu realisieren, sondern direkt zu zeichnen? Oder eventuell über SVG-Bilder, die sich besser skalieren lassen?

EWeiss 30. Jun 2011 23:41

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109365)
Zitat:

Zitat von EWeiss (Beitrag 1109364)
Denke das ist normal die ScrollBars sind wohl etwas Größer ausgefallen.

Aha: Da liegt der Hase im Pfeffer. Ich habe mal auf meinem Rechner den Scrollbars eine XXL-Größe mit einer Breite von 30 Pixeln verpaßt:
Anhang 34539

Damit offenbart sich ein Problem: Deine Scrollbars funktionieren nur dann richtig, wenn nicht irgendwer seinen Rechner "umgestellt" hat. Wäre es da nicht eventuell günstiger, die Darstellung nicht über Bilder zu realisieren, sondern direkt zu zeichnen? Oder eventuell über SVG-Bilder, die sich besser skalieren lassen?

Denke mal von meiner erfahrung her geht nichts über PNG.
Hatte da noch nie probleme bei der Skalierung.

Man müßte halt dann noch irgendwie abfragen wie die aktuelle positionen im System eingestellt sind.
Da muss ich mich aber erst mal reindenken und im NET mal nachblättern wie ich das realisieren kann.
Das skalieren ist dann das kleinst problem.
Denke das ich dann aber die Stretchblitter Methode von GDI+ verwenden werde.
Aktuell ist sie ja von GDI.

PS:
Denke das ist über den Rect der Originalen ScrollBar zu ermitteln.
Da muss man nicht im System rumwurschteln.


gruss

Thom 30. Jun 2011 23:56

AW: SubClassed ScrollBar
 
Zitat:

Zitat von EWeiss (Beitrag 1109367)
Denke das ist über den Rect der Originalen ScrollBar zu ermitteln. Da muss man nicht im System rumwurschteln.

Ja - denke auch, daß das funktionieren sollte. Du ermittelst ja schon den Bereich bzw. das Rechteck, das die Scrollbar einnimmt.

EWeiss 1. Jul 2011 00:04

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109368)
Zitat:

Zitat von EWeiss (Beitrag 1109367)
Denke das ist über den Rect der Originalen ScrollBar zu ermitteln. Da muss man nicht im System rumwurschteln.

Ja - denke auch, daß das funktionieren sollte. Du ermittelst ja schon den Bereich bzw. das Rechteck, das die Scrollbar einnimmt.

Man muss ja nur die Höhe prüfen mehr ist das nicht und dann darauf reagieren.
Die Standard einstellung ist 16x16 pixel ..den Rect prüfen und dann hochrechnen also wenn die höhe 20 dann müssen die
Down und Up Button ebend auf 20x20 hochskaliert werden.

Einfach * ScaleFactor

gruss

EWeiss 1. Jul 2011 21:30

AW: SubClassed ScrollBar
 
Quelltext in DLL gekapselt alles andere oben.

gruss

EWeiss 2. Jul 2011 10:10

AW: SubClassed ScrollBar
 
Neue Version mit mehreren Komponenten auf der Form hochgeladen.

gruss

EWeiss 3. Jul 2011 12:50

AW: SubClassed ScrollBar
 
Nun Open Source!

Viel Spass damit.

gruss

EWeiss 4. Jul 2011 19:58

AW: SubClassed ScrollBar
 
Auch wenn da nicht gerade viele Meinungen kommen.
Werde das teil mal um ComboBoxen erweitern und zu Ctrl_Hook umbenennen.

Hab im moment eh nix zu tun.

Muss das Frame und das Bitmap noch Rendern dann passt das schon :)

gruss

Thom 4. Jul 2011 20:28

AW: SubClassed ScrollBar
 
Zitat:

Zitat von EWeiss (Beitrag 1109948)
Auch wenn da nicht gerade viele Meinungen kommen.

Ich finde Deine Arbeit toll! Mach' bitte weiter so! Mit Deinem Piano kann ich leider nicht allzuviel anfangen - ich bin nämlich völlkommen unmusikalisch -, aber auch dort bin ich von der Grafik und der gesamten Gestaltung total begeistert. :thumb:

EWeiss 4. Jul 2011 21:10

AW: SubClassed ScrollBar
 
Zitat:

Zitat von Thom (Beitrag 1109950)
Zitat:

Zitat von EWeiss (Beitrag 1109948)
Auch wenn da nicht gerade viele Meinungen kommen.

Ich finde Deine Arbeit toll! Mach' bitte weiter so! Mit Deinem Piano kann ich leider nicht allzuviel anfangen - ich bin nämlich völlkommen unmusikalisch -, aber auch dort bin ich von der Grafik und der gesamten Gestaltung total begeistert. :thumb:

Ich bekomme meine Arbeit schon verteilt habe ja auch noch Anhänger im Chinesischen Raum ;)

Sieht jetzt in etwa so aus!

Delphi-Quellcode:
  ScrbMemoHook: IHookedScrollbar;
  ComboHook  : IHookedCombo;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  FilePath: string;
begin

  ScrbMemoHook := HookedScroolBar_Create;
  if assigned(ScrbMemoHook) then
  begin
    FilePath := ExtractFilePath(ParamStr(0));

    // Memo1
    // Vertikale ScrollBar Images
    ScrbMemoHook.VTrack := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\VTrack.png');
    ScrbMemoHook.VBtnUp := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\VBtnUp.png');
    ScrbMemoHook.VThumb := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\VThumb.png');
    ScrbMemoHook.VBtnDown := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\VBtnDown.png');

    // Horizontale ScrollBar Images
    ScrbMemoHook.HTrack := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\HTrack.png');
    ScrbMemoHook.HBtnLeft := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\HBtnLeft.png');
    ScrbMemoHook.HThumb := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\HThumb.png');
    ScrbMemoHook.HBtnRight := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\HBtnRight.png');

    ScrbMemoHook.Sizer := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\Sizer.png');

    ScrbMemoHook.SetScrollBarObj(Memo1);
    ScrbMemoHook.Connect;
  end;

  ComboHook := HookedCombo_Create;
  if assigned(ComboHook) then
  begin
    ComboHook.ComboImg := ScrbMemoHook.CreateImageFromFile(FilePath + 'ScrollBarSkin\Combo.png');
    ComboHook.FrameColor := $FCAC65;
    ComboHook.FrameHighLite := $FFE9D6;

    ComboHook.SetComboParentObj(self);
    ComboHook.Connect;
  end;

end;
Kann man dann wie vorher auch mit ComboBox, DriveCombobox usw.. machen.
Nur in diesen Fall erstelle ich eine Collection also enumeriere alle Controls die eine Combo enthalten
und verarbeite die in einem Rutsch.
Deshalb übergebe ich diesmal als Object 'self' das erleichtert mir das parsen.

gruss

EWeiss 7. Jul 2011 14:10

AW: SubClassed Control
 
Neue Version oben ..
Verwendung auf eigene Gefahr!

gruss

wicht 7. Jul 2011 14:41

AW: SubClassed Control
 
Ich finde das Ding auch schick - auch wenn ich nicht denke, dass ich es benutzen werde, gibt einfach nichts von mir wo es reinpassen würde.
Für das Open-Source gibt es übrigens :thumb::thumb::thumb: !

EWeiss 7. Jul 2011 14:48

AW: SubClassed Control
 
Zitat:

Zitat von wicht (Beitrag 1110614)
Ich finde das Ding auch schick - auch wenn ich nicht denke, dass ich es benutzen werde, gibt einfach nichts von mir wo es reinpassen würde.
Für das Open-Source gibt es übrigens :thumb::thumb::thumb: !

Danke ...
Ein paar kleine Sachen werden da wohl noch im argen sein.
Aber das kann ja jeder oder einer selber fixen wenn er was findet.

Bin nur Hobby Schreiber :)

PS:
Auch wenn da Hook steht mit Hook hat es im eigentlichen Sinne nichts zu tun.

gruss

EWeiss 8. Jul 2011 10:41

AW: SubClassed Control
 
ne neue MouseWheel für ScrollBars addiert.
Wenn ich in der nächsten zeit noch Bock hab dann implementiere ich noch die Checkboxen

gruss

Cylence 26. Okt 2011 07:37

AW: SubClassed Control
 
Hallo,

ich hab mir das eben angeschaut, also erstmal ... GEIL :-) echt hammergeil, das such ich eigentlich schon ne ganze weile, ich wollte in meinem Player die Playliste schwarz machen, aber wegen den Scrollbars sieht das sche... aus, aber mit dem hier würde es jetzt endlich gehen. Allerdings hab ich das hier eben unter Win7 64 angesehen und habe auch hier den 1 pixel nach rechts verschoben, aber meine Einstellungen im Windows für die Scrollbars ist auf standart. Gibt es hierzu schon einen fix? Kann man evtl die größe der scrollbar auslesen und die von dir daran anpassen? Auf jeden Fall mal Kompliment, tolle Arbeit!!!


Gruß

tom

EWeiss 26. Okt 2011 10:47

AW: SubClassed Control
 
Zitat:

Zitat von Cylence (Beitrag 1132577)
Hallo,
Allerdings hab ich das hier eben unter Win7 64 angesehen und habe auch hier den 1 pixel nach rechts verschoben, aber meine Einstellungen im Windows für die Scrollbars ist auf standart. Gibt es hierzu schon einen fix?

Also sagte ja schon in einem Post vorher ich hab da keine Probleme mit. (Win7 64Bit)

Zitat:

Kann man evtl die größe der scrollbar auslesen und die von dir daran anpassen?
Schau mal im source wo der Rect der Scrollbar ermittelt wird da dürfte eigentlich kein fehler vorliegen.
Alternativ könnte man ja noch anstelle von Bitblt StretchBlt verwenden.

PS:
Alternativ (vieleicht hab ich mein Bitmap zu klein gemacht)
Kannst das ja mal prüfen.
gruss

himitsu 26. Okt 2011 19:14

AW: SubClassed Control
 
Einwas ist aber noch falsch.

Delphi-Quellcode:
  function HookedCombo_Create: IHookedCombo; stdcall;
  procedure HookedCombo_Destroy; stdcall;

var
  HookedCombo: IHookedCombo;
  CloseHandle: HWND;

implementation
Und zwar die bösen globalen Variablen. :warn:

HookedCombo_Destroy kann also immer nur das zuletzt erstelle Control freigeben.
Entweder du gibst dieser Prozedur das richtige Handle mit, oder ... du nutzt doch eh Interfaces.

Also laß' einfach diese Funktion und die beiden Variablen weg.
Die Komponenten wird doch zusammen mit dem im Interface liegenden Objekt freigegeben.

Nutze stattdessen TInterfacedObject als Vorfahre, dann hat man im Hauptprogramm noch die Kontrolle und kann darüber das SubclassesControl freigeben, indem man den Interfacezeiger freigibt.
Dazu muß dann natürlich im Hauptprogramm immer dieser Zeiger gespeichert werden/bleiben.


Und auch im Hauptprogramm gehören diese Variablen nicht global, sondern z.B. als private Felder in die Form-Klasse.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    ...
  private
    { Private-Deklarationen }
    ScrbMemoHook : IHookedScrollbar;
    ScrbMemoHook2 : IHookedScrollbar;
    ComboHook   : IHookedCombo;
  public
    { Public-Deklarationen }
  end;
Statt den vielen Variablen könnte man auch eine TInterfaceList verwenden, dazu dann noch eine Funktion, welche die Components der Form durchgeht, alle passenden Kombonenten sucht, für alle die SubclassedObjects erstellt und sie in der TInterfaceList speichert, welcher mit der Form dann freigegeben wird.


[add]
Delphi-Quellcode:
type
  TSubclassedList = class(TComponent)
    List: TInterfaceList;
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;
  end;

constructor TSubclassedList.Create(Owner: TComponent);
begin
  inherited;
  List := TInterfaceList.Create;
end;

destructor TSubclassedList.Destroy;
begin
  List.Free;
  inherited;
end;

procedure FindSubclassed(Comp: TWinControl; Config: TStrings; L: TSubclassedList = nil);
var
  i: Integer;
  S: IHookedScrollbar;
  C: IHookedCombo;
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.SetScrollBarObj(Comp.Controls[i]);
      S.Connect;
    end else if Comp.Controls[i] is TCustomCombo then begin
      // Comboox
      C := HookedCombo_Create;
      L.List.Add(C);
      if Config.Values['ComboImg']     > '' then C.ComboImg     := C.CreateImageFromFile(Config.Values['Path'] + Config.Values['ComboImg']);
      if Config.Values['FrameColor']   > '' then C.FrameColor   := StringToColor(Config.Values['FrameColor']);
      if Config.Values['FrameHighLite'] > '' then C.FrameHighLite := StringToColor(Config.Values['FrameHighLite']);
    //if Config.Values['FrameStyle']   > '' then C.FrameStyle   := StringToXxx(Config.Values['FrameStyle']);
      C.SetComboParentObj(Comp.Controls[i]);
      C.Connect;
    end;
    FindSubclassed(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';
    // Comboox
    Config.Values['ComboImg']     := 'Combo.png';
    Config.Values['FrameColor']   := '$FED3AC';
    Config.Values['FrameHighLite'] := '$666666';
    Config.Values['FrameStyle']   := 'FrameFlat';
    //
    FindSubclassed(Self, Config);
  finally
    Config.Free;
  end;
end;
(siehe Signatur)




[add]
Tut mir Leid das jetzt so hart sagen zu müssen, aber das Teil ist das reinste Speichergrab.
So
Delphi-Quellcode:
if assigned(VTrack) then VTrack := nil;
gibt man jedenfalls keine Komonente ala TBitmap frei.

Wobei, wie schon gesagt, hier eh fast keine Komponenten freigegeben werden, da HookedScroolBar_Destroy nur beim Letzen wirkt.

EWeiss 26. Okt 2011 20:34

AW: SubClassed Control
 
Danke für die Infos :)
Wenn ich bock habe da noch was in der nächsten zeit zu berichtigen werde ich die
von dir vorgeschlagenen Aspekte mit berücksichtigen.

Zitat:

Tut mir Leid das jetzt so hart sagen zu müssen, aber das Teil ist das reinste Speichergrab.
Kein problem muss dir nicht leid tun ;)

Ich denke das Control's ala HWND (also Nonvcl erstellte Windows) von Windows grundsätzlich selbst freigegeben werden.
Warum dann die Arbeit machen diese in einer Collection zusammen zu fassen ?
War so schon schwer genug ..
Der Ansatz ist vorhanden und kann dann vom User soweit er es verwenden will und Fehler findet selbst korrigiert werden.

gruss

EWeiss 12. Mai 2012 13:54

AW: SubClassed Control
 
Hab mal ne neue version hochgeladen.
Wenn jemand Bock hat kann er mir mal mitteilen ob die Speicherlecks jetzt beseitigt sind.
Vorrangig erstmal die für die ComboBoxen.

FastMM zeigt mir zumindest nichts mehr an.

Hab die Function von himitsu mal mit eingebunden.

gruss

EWeiss 13. Mai 2012 15:00

AW: SubClassed Control
 
Neuerungen siehe oben.

gruss

noisy_master 24. Mär 2016 10:32

AW: SubClassed Control
 
gibt es das noch irgendwo zum herunterladen?

EWeiss 24. Mär 2016 16:25

AW: SubClassed Control
 
Leider nein, da einige Leute hier meinen sich nicht an Urheberrechte halten zu müssen
habe ich alle meine Projekte hier entfernt.
Es sollte aber kein Problem sein so etwas selbst zu programmieren.

gruss

EWeiss 10. Okt 2016 09:25

AW: SubClassed Control
 
Habe noch ne Checkbox addiert da ich diese für mein aktuelles Projekt benötigte.
Ich möchte darum bitten die Header nicht zu entfernen.. wenn ihr was verbessert addiert eure
Änderungen dazu.

Für NonVcl muss man diese Funktionen deaktivieren.
Delphi-Quellcode:
    procedure SetCheckBoxParentObj(ParentObj: TWinControl);
    procedure SetCheckBoxObj(CtrlObj: TWinControl);
Anschließend diese Funktion erweitern.

Delphi-Quellcode:
procedure Connect;

Delphi-Quellcode:
procedure Connect(ParentHandle: HWND; CtrlHandle: HWND);


Man übergibt dann das ParentHandle = Form -> Handle
Und dazu das des Controls bsp. Checkbox -> Handle
Aber Achtung diese Änderungen müssen dann natürlich auch im Interface geschehen..

3D Text mit Schatten wie im Anhang zu sehen ist in diesen Projekt nicht verfügbar.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz