![]() |
Event einem bestimmten control zuweisen
Ich erstelle eine CallBack..
Delphi-Quellcode:
type
TVScrollBarState = (OnChange = 0, OnScroll = 1); TVScrollBarEvent = procedure(NewState: TVScrollBarState; Value: Integer); stdcall; var VScrollEventCallback: TVScrollBarEvent; ... procedure LVScrollBarCallBack(NewState: TVScrollBarState; Value: Integer); stdcall;
Delphi-Quellcode:
procedure TSkinVScrollBar.SetVScrollBarCallBack(callback: TVScrollBarEvent); stdcall;
begin VScrollEventCallback := callback; end;
Delphi-Quellcode:
Initialisierung..
if (assigned(VScrollEventCallback)) then
VScrollEventCallback(OnChange, Trunc(FTmpVal));
Delphi-Quellcode:
LVScrollBar.SetVScrollBarCallBack(LVScrollBarCallBack);
Alles kein Problem solange ich keine 2 Listen auf der Form habe. Weil durch die erneute zuweisung die CallBack für die vorher erstellte Liste nicht mehr gültig ist. Wie kann ich das problem beheben ? gruss |
AW: Event einem bestimmten control zuweisen
Moin,
erstelle eine erweiterte Scrollbarklasse, die dann eine Property für die Event erhält. So hat jede Scrollbar ihren eigenen Platz für die Adresse der Routine. |
AW: Event einem bestimmten control zuweisen
Zitat:
Jemand nen Tip? Wenn ich die obere Scrollbar bewege wird unten die Liste geändert. Die Callback ist nur gültig für die zuletzt erstellte Liste gruss |
AW: Event einem bestimmten control zuweisen
WER ruft denn den Callback auf? Eine Instanz einer Scrollbar?
Was ist LVScrollbar? |
AW: Event einem bestimmten control zuweisen
Der CallBack muss als Eigenschaft der Klasse/Instanz gespeichert werden und nicht in einer globalen/unit-globalen Variablen, da eben dort nur ein CallBack gespeichert werden kann.
Delphi-Quellcode:
type
TSkinVScrollBar = class private FVScrollEventCallBack : TVScrollBarEvent; procedure SetVScrollEventCallBack( Value : TVScrollBarEvent ); published property VScrollEventCallBack : TVScrollEvent read FVScrollEventCallBack write SetVScrollEventCallBack; end; procedure TSkinVScrollBar.SetVScrollEventCallBack( Value : TVScrollBarEvent ); begin FVScrollEventCallBack := Value; end; |
AW: Event einem bestimmten control zuweisen
Ausserdem ist es eine schlechte Idee die Ereignisse OnChange und OnScroll mit dem gleichen Event abzubilden.
Man braucht eben zwei Events. Und zusätzlich sollte der 1. Parameter der Events das Objekt selber sein damit man im Eventhandler Zugriff auf die Daten des Objekts bekommt, dass das Event ausgelöst hat. |
AW: Event einem bestimmten control zuweisen
Zitat:
Wenn das Flag ShowVSroll gesetzt ist wird eine instanz der LVSrollbar gestartet. Zitat:
L = List V - Vertikal S -Scrollbar Zitat:
gruss |
AW: Event einem bestimmten control zuweisen
Habe den vorschlag mal umgesetzt.
Es ändert aber nichts an der problematik das dass vorherige Event(CallBack) von der nächsten Initialisierung aufgehoben wird. Dabei spielt es im moment keine rolle ob diese global oder privat deklariert ist. Ich lasse es jetzt aber so um eventuelle anderer probleme seitens der globalen deklaration, vorzubeugen. gruss |
AW: Event einem bestimmten control zuweisen
Zitat:
Delphi-Quellcode:
etwas stutzen. Hast du diesen Teil in einer DLL ausgelagert und kann es sein, dass du nur eine Instanz erzeugst und diese immer wieder verwendest?
stdcall
Denn nur so kann ich mir vorstellen, dass sich das Verhalten nicht ändert. |
AW: Event einem bestimmten control zuweisen
Wenn die DirList erzeugt wird (ohne FileList) funktioniert alles soweit einwandfrei.
Der Anwender kann nur Propertys festlegen ansonsten hat er keinen Einfluss auf das Control selbst. Alle Funktionen das füllen der Box selbst ist abhängig davon welches Laufwerk in der DriveList ausgewählt wurde. Die Scrollbox wird quasi innerhalb der DirList erzeugt und ist nicht von außen beinflussbar. Also wenn ich die Instanz DirList erzeugt habe und das Fenster erfolgreich registriert wurde dann wird für die Liste eine Instanz der Scrollbar erstellt. Das selbe mit der FileList. Alle Deklarationen sind privat in der jeweiligen Classe. Mit dem stdcall .. denke nicht das dies probleme bereitet. Die scrollbox reagiert nur auf das zuletzt erstellte Fenster. Muss mal schaun irgendwas läuft da echt daneben. ;) EDIT: Das problem ist wohl eher das Handle der aktuellen Listox wie es ausschaut. Die Callback procedure in die Classe einfügen mag sie gar nicht daher komme ich schlecht an das Handle der aktuellen ListBox. Zitat:
|
AW: Event einem bestimmten control zuweisen
Push.. Sorry
Ok! Hat sich erledigt das Thema.. Neue Controls DriveList, DirList und FileList ala Win3.1 Die Directory Liste wurde dem Dialog "DlgDirList" nach empfunden so kann man sich Treeview und konsorte sparen. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 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