![]() |
zwei Checkboxen verknüpfen
Hallo!
Ich habe ein kleines Problem und momentan nicht die Zeit, mir den Kopf darüber zu zerbrechen, vielleicht weiß zufällig jemand von euch eine Lösung. Ich brauche für ein Programm zwei Spalten, in denen Checkboxen angezeigt werden. Nachdem ich keine passende Komponente gefunden habe, dachte ich mir, ich platziere zwei Checkboxen nebeneinander und synchronisiere diese. Heißt, ich überlappe eine Checkbox und falls der Anwender mit dem Scrollbalken die Ansicht verändert, ziehe ich die andere Checkbox einfach mit. Idee ist im Prinzip einfach, wenn es ein Ereignis OnScroll gäbe. Gibt es aber nicht!! Weiß jemand, wie ich mitbekomme, wenn der Anwender auf den Scrollbalken der Checkbox klickt? |
Re: zwei Checkboxen verknüpfen
Hallo,
zeig mal wie ein TCheckBox mit Scrollbalken aussieht. Habe ich noch nie gesehen |
Re: zwei Checkboxen verknüpfen
Natürlich meine ich CheckListBoxen, dann gibt es auch einen Scrollbalken!!
|
Re: zwei Checkboxen verknüpfen
Hallo,
Fensterprocedure durch eigene ersetzen und auf die Messages WM_VSCROLL und WM_HSCROLL reagieren. |
Re: zwei Checkboxen verknüpfen
Das musst du halt nur auf deine CheckListboxen übertragen, drüfte aber kein Problem sein.
Das ist das, was Jens gemeint hat. ;)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; ListBox2: TListBox; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } OldGridProc1, OldGridProc2: TWndMethod; procedure Grid1WindowProc(var Message: TMessage); procedure Grid2WindowProc(var Message: TMessage); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Grid1WindowProc(var Message: TMessage); begin OldGridProc1(Message); if ((Message.Msg = WM_VSCROLL) or (Message.Msg = WM_HSCROLL) or (Message.Msg = WM_Mousewheel)) then begin OldGridProc2(Message); end; end; procedure TForm1.Grid2WindowProc(var Message: TMessage); begin OldGridProc2(Message); if ((Message.Msg = WM_VSCROLL) or (Message.Msg = WM_HSCROLL) or (Message.msg = WM_Mousewheel)) then begin OldGridProc1(Message); end; end; procedure TForm1.FormCreate(Sender: TObject); begin OldGridProc1 := ListBox1.WindowProc; OldGridProc2 := ListBox2.WindowProc; ListBox1.WindowProc := Grid1WindowProc; ListBox2.WindowProc := Grid2WindowProc; end; |
Re: zwei Checkboxen verknüpfen
Hallo,
wie binde ich die Fensterprocedure ein?? Hab ich noch nie gemacht! :pale: [Ups, vergiss es! Vielen Dank Matze! Kann man die leichte zeitliche Verzögerung auch noch elegant vertuschen??] |
Re: zwei Checkboxen verknüpfen
Wahrscheinlist hast du meinen Beitrag verpasst, auf jedenfall steht's da drin. ;)
|
Re: zwei Checkboxen verknüpfen
Hallo,
ich musste mal vor langer Zeit TScrollboxen synchronisieren. Da habe ich mir einen Nachfahren gebastelt. Mit dem Prinzip kann man X Komponenten synchronisieren. Die TScrollboxen , die synchronisiert werden sollen erhalten den gleichen GroupIndex. Außerdem liefert die Komponente auch ein OnVScroll und ein OnHScroll Event. Muss eben nur noch auf TCheckBox übertragen werden.
Delphi-Quellcode:
Ach ja, die TScrollBoxen müssen den gleichen Parent haben.
unit ScrollBoxEx;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; Const CM_SCROLLBOXEXVERTSCROLL = WM_USER+512; CM_SCROLLBOXEXHORIZSCROLL = WM_USER+513; type TScrollEvent = procedure (Sender : TObject; Position : Integer) of Object; TScrollBoxEx = class(TScrollBox) private FOnVScroll : TScrollEvent; FGroupIndex: Integer; fOnHScroll: TScrollEvent; procedure SetGroupIndex(const Value: Integer); procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL; procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL; procedure CMSCROLLBOXEXVERTSCROLL(var Message: TMessage); message CM_SCROLLBOXEXVERTSCROLL; procedure CMSCROLLBOXEXHORIZSCROLL(var Message: TMessage); message CM_SCROLLBOXEXHORIZSCROLL; { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner : TComponent); override; published { Published-Deklarationen } property GroupIndex : Integer read FGroupIndex write SetGroupIndex default 0; property OnVScroll : TScrollEvent read fOnVScroll write fOnVScroll; property OnHScroll : TScrollEvent read fOnHScroll write fOnHScroll; end; procedure Register; implementation procedure Register; begin RegisterComponents('Mycomps', [TScrollBoxEx]); end; { TScrollBoxEx } constructor TScrollBoxEx.Create(AOwner : TComponent); begin inherited Create(AOwner); FGroupIndex:=0; fOnVScroll:=Nil; end; procedure TScrollBoxEx.SetGroupIndex(const Value: Integer); begin FGroupIndex := Value; end; procedure TScrollBoxEx.WMHScroll(var Message: TWMHScroll); var Msg: TMessage; begin inherited; If Assigned(fOnHScroll) then fOnHScroll(Self,Message.Pos); if (FGroupIndex <> 0) and (Parent <> nil) then begin Msg.Msg := CM_SCROLLBOXEXHORIZSCROLL; Msg.WParam := FGroupIndex; Msg.LParam := Longint(Self); Msg.Result := 0; Parent.Broadcast(Msg); end; end; procedure TScrollBoxEx.WMVScroll(var Message: TWMVScroll); var Msg: TMessage; begin inherited; If Assigned(fOnVScroll) then fOnVScroll(Self,Message.Pos); if (FGroupIndex <> 0) and (Parent <> nil) then begin Msg.Msg := CM_SCROLLBOXEXVERTSCROLL; Msg.WParam := FGroupIndex; Msg.LParam := Longint(Self); Msg.Result := 0; Parent.Broadcast(Msg); end; end; procedure TScrollBoxEx.CMSCROLLBOXEXVERTSCROLL(var Message: TMessage); var Sender: TScrollBoxEx; begin inherited; If FGroupIndex<=0 then Exit; if Message.WParam = FGroupIndex then begin Sender := TScrollBoxEx(Message.LParam); if Sender <> Self then begin VertScrollBar.Position:=Sender.VertScrollBar.Position; end; end; end; procedure TScrollBoxEx.CMSCROLLBOXEXHORIZSCROLL(var Message: TMessage); var Sender: TScrollBoxEx; begin inherited; If FGroupIndex<=0 then Exit; if Message.WParam = FGroupIndex then begin Sender := TScrollBoxEx(Message.LParam); if Sender <> Self then begin HorzScrollBar.Position:=Sender.HorzScrollBar.Position; end; end; end; end. |
Re: zwei Checkboxen verknüpfen
@Pascal: Könntest du denn Titel ändern, es handelt sich ja nun um Checklistboxen und nicht um Checkboxen.
Sonst findest man diesen Thread in der Suche nie. :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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