AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi [gelöst]ListBox Zugriffsverletzung
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst]ListBox Zugriffsverletzung

Ein Thema von ONeill · begonnen am 26. Nov 2011 · letzter Beitrag vom 26. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2      
ONeill

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

[gelöst]ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 13: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 18:24 Uhr) Grund: Gelöst markiert
  Mit Zitat antworten Zitat
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 13:56
Hallo,

erzeugst Du Deine Objekte auch? Also z.B.:
MyCustomListBox := TMyCustomListBox.Create; Gleiches Problem sehe ich für das Feld FRef. Du hast es zwar als TCustomListBox deklariert, solltest die CustomListBox aber auch erzeugen oder wird das Feld FRef mit einer ListBox verbunden, die Du im Form hast?

MyCustomListBox.Reference := MyFormListBox; Diese Variante wäre nicht sehr gut, da es sich in Deinem Form höchstwahrscheinlich dann um eine TListBox handelt, die nicht so ohne weiteres an eine TCustomListBox übergeben werden kann.
Andernfalls, solltest Du die FRef-Felder beim Aufruf des Konstruktors erzeugen.

Delphi-Quellcode:
constructor TMyCustomListBox.Create;
begin
  inherited Create;
  self.FRef := TCustomListBox.Create;
end;
Viele Grüße,
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.

Geändert von MGC (26. Nov 2011 um 13:59 Uhr)
  Mit Zitat antworten Zitat
ONeill

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

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 14:00
Ich erzeuge sie doch, siehe in dem FormCreate ereigniss.
Befüllt werden die auch.
  Mit Zitat antworten Zitat
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 14:04
Entschuldige, habe ich nicht gesehen.


Nochmal eine andere Frage.
Du möchtest mit SearchFor.LBox.Items auf Deine CustomListBox zugreifen, diese Methode scheinst Du allerdings gar nicht in Dein Objekt eingebunden zu haben.

Bist Du Dir hier sicher, das durch die With-Anweisung nicht LBox1.Reference := LBox1.LBox; vom Compiler verstanden wird?

Delphi-Quellcode:
 with LBox1 do
  begin
   Parent := Self;
   Visible := true;
   Top := 96;
   Left := 154;
   Width := 65;
   Height := 244;
   Reference :=LBox;
  end;
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.

Geändert von MGC (26. Nov 2011 um 14:09 Uhr)
  Mit Zitat antworten Zitat
ONeill

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

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 14:12
Also, ich habe jetzt den Zugriff auf die ListBox so umgesetzt:
showmessage(Searchfor.LBox.Reference.Items[Searchfor.LBox.Reference.ItemIndex]); Allerdings das gleich eProblem
  Mit Zitat antworten Zitat
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 14:38
Ich muss zugeben, ich habe auf diesem Gebiet bisher keine Erfahrung sammeln können und momentan auch keine IDE hier zur Vefügung.
Hast Du Daten in Deinen Listboxen hinterlegt, bzw. hast Du eine Sicherheistabfrage, die Dir zurückmeldet das es keine Einträge gibt und die Exception behandelt?

Ich nehme mal an, Du hast Dich an diesem Betrag orientier?
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.

Geändert von MGC (26. Nov 2011 um 14:43 Uhr)
  Mit Zitat antworten Zitat
ONeill

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

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 14:45
Der beitrag ist richtig, ja.
Ich habe erstmal keine Überprüfung ob etwas ausgewählt wurde gemacht. Das wollte ich später machen. Allerdings ist die Liste befüllt und beim Klicken auf den Button zum Form erstellen, habe ich auch was ausgewählt. Ansonsten wäre es ja logisch
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 14:59
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,

1. Du solltest mehr Infos posten, zb was für eine Zugriffsverletzung auftritt!
2. Hast du denn mal selber durch deinen Code gesteppt, und geschaut ob es nicht an was anderem liegen könnte? Der Fehler ist meistens eine Zeile über dem von Delphi makierten.
3. Sollte das nicht der Fall sein, wirst du mehr von deinem Code posten müssen.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von MGC
MGC

Registriert seit: 15. Mai 2008
Ort: Helsa
106 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 15:03
Wieso sind LBox udn LBox1 bei Dir in einem public Bereich?
Zu welchem Object oder Form gehören sie? Momentan sieht das auf diese Weise seltsam aus. a Du aber Auslassungszeichen //[..] verwendet hast, gehe ich davon aus, dass dort noch mehr Code ist.
Aber aus welchem Grund nimmst Du dafür keine globalen Variablen? Aus Sicherheistgründen?
Marc
Programmieren ist wie Chemie:
1. Wenn man alles einfach nur zusammenschmeisst kommt es zu unerwarteten Reaktionen.
2. Wenn es plötzlich anfängt zu qualmen, muss man eben noch mal von vorn anfangen.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: ListBox Zugriffsverletzung

  Alt 26. Nov 2011, 15:14
Searchfor wird schon richtig iniatialisiert?
Also im Projekt
Application.CreateForm(TSearchfor , Searchfor );

oder im Code Searchfor := TSearchfor.Create(xxx)

und nicht in der Art
With TSearchfor.Create(self) do ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:09 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