AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

zwei Checkboxen verknüpfen

Ein Thema von Pascal · begonnen am 15. Mär 2004 · letzter Beitrag vom 15. Mär 2004
Antwort Antwort
Pascal

Registriert seit: 10. Aug 2003
22 Beiträge
 
Delphi 7 Enterprise
 
#1

zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 13:27
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?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 13:29
Hallo,
zeig mal wie ein TCheckBox mit Scrollbalken aussieht. Habe ich noch nie gesehen
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Pascal

Registriert seit: 10. Aug 2003
22 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 13:32
Natürlich meine ich CheckListBoxen, dann gibt es auch einen Scrollbalken!!
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 13:41
Hallo,
Fensterprocedure durch eigene ersetzen und auf die Messages WM_VSCROLL und WM_HSCROLL reagieren.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 13:47
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;
  Mit Zitat antworten Zitat
Pascal

Registriert seit: 10. Aug 2003
22 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 13:48
Hallo,

wie binde ich die Fensterprocedure ein??
Hab ich noch nie gemacht!

[Ups, vergiss es! Vielen Dank Matze! Kann man die leichte zeitliche Verzögerung auch noch elegant vertuschen??]
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 13:50
Wahrscheinlist hast du meinen Beitrag verpasst, auf jedenfall steht's da drin.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 14:27
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:
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.
Ach ja, die TScrollBoxen müssen den gleichen Parent haben.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: zwei Checkboxen verknüpfen

  Alt 15. Mär 2004, 17:43
@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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 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