Einzelnen Beitrag anzeigen

ONeill

Registriert seit: 17. Nov 2011
28 Beiträge
 
#1

[gelöst]ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 12:40
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,

Geändert von ONeill (26. Nov 2011 um 17:24 Uhr) Grund: Gelöst markiert
  Mit Zitat antworten Zitat