Hallo Forum,
ich habe mal ein kleines Problem.
Ich habe mir hier aus dem Forum die beiden veränderten Klassen für die ListBox genommen, damit zwei ListBoxen parallel scrollen.
Folgender Code ist da rausgekommen:
Delphi-Quellcode:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
mysql;
type
TNoVScrolllistbox =
Class( Tlistbox )
private
FRef : TCustomListBox;
Procedure WMNCCalcSize(
Var msg: TMessage );
message WM_NCCALCSIZE;
published
property Reference : TCustomListBox
read FRef
write FRef;
end;
TMyListBox =
class(TListBox)
private
FRef : TCustomListBox;
procedure WMHScroll(
var Message: TWMHScroll);
message WM_HSCROLL;
procedure WMVScroll(
var Message: TWMVScroll);
message WM_VSCROLL;
public
constructor Create(AOwner: TComponent);
override;
published
property Reference : TCustomListBox
read FRef
write FRef;
end;
//[...]
private
public
LBox : TNoVScrolllistbox;
LBox1: TMyListBox;
end;
//[...]
procedure TSearchfor.FormCreate(Sender: TObject);
begin
Randomize;
LBox := TNoVScrolllistbox.Create(Self);
with LBox
do
begin
Parent := Self;
Visible := true;
Top := 96;
Left := 0;
Width := 154;
Height := 244;
Enabled:=False;
end;
Randomize;
LBox1 := TMyListBox.Create(Self);
with LBox1
do
begin
Parent := Self;
Visible := true;
Top := 96;
Left := 154;
Width := 65;
Height := 244;
Reference :=LBox;
end;
SetScrollRange(LBox.Handle, SB_VERT, 0, 0, False);
end;
procedure TNoVScrolllistbox.WMNCCalcSize(
var msg: TMessage);
var
style: Integer;
begin
style := getWindowLong(
handle, GWL_STYLE );
If (style
and WS_VSCROLL) <> 0
Then
SetWindowLong(
handle, GWL_STYLE, style
and not WS_VSCROLL );
inherited;
end;
procedure TSearchfor.FormDestroy(Sender: TObject);
begin
LBox.Free;
end;
constructor TMyListBox.Create(AOwner: TComponent);
begin
inherited;
FRef :=
nil;
end;
procedure TMyListBox.WMHScroll(
var Message: TWMHScroll);
begin
inherited;
end;
procedure TMyListBox.WMVScroll(
var Message: TWMVScroll);
begin
inherited;
if Assigned(FRef)
then FRef.TopIndex := TopIndex;
end;
end.
Funktioniert auch alles ganz gut. Allerdings habe ich dann das Problem, das ich von einem anderen Form, welches so erstellt wird:
Delphi-Quellcode:
procedure TSearchfor.btnshowuserClick(Sender: TObject);
begin
TShowuser.Create(Self);
end;
nicht wie folgt auf die ListBoxen zugreifen kann:
showmessage(Searchfor.LBox.Items[SearchFor.LBox.ItemIndex]);
Da bekomme ich immer eine Zugriffsverletzung.
Kann mir da jemand weiterhelfen, ich bin mit meinem Latein am Ende, ich weiß ehrlich nicht mehr weiter, rein theoretisch müsste es ja gehen.
Ich hoffe, das es nicht nur ein Problem ist, welches ich übersehe
Danke schonmal für eure Hilfe schonmal im voraus,