Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PageControl , Ereignis wenn neue TabSheet angeklickt wurde (https://www.delphipraxis.net/21488-pagecontrol-ereignis-wenn-neue-tabsheet-angeklickt-wurde.html)

shareholder 3. Mai 2004 18:24


PageControl , Ereignis wenn neue TabSheet angeklickt wurde
 
Bei folgendem Code tritt eine AV (Access Violation) auf. :wall:

Delphi-Quellcode:
procedure TMainForm.PageControl1Chang(ing/e)(Sender: TObject;
  var AllowChange: Boolean);
begin
  // Funktion zum Löschen der ListView;
  LoeschenLV;
end;
Wie würdet Ihr das anstellen ?

edit: Das Ereignis soll für alle TabSheets sein!

alcaeus 3. Mai 2004 19:12

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
Ich würds im OnChange machen. Und was macht eigentlich deine LoeschenLV? Vielleicht löst diese die AV aus?

shareholder 3. Mai 2004 19:15

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
ja, das ist ja das problem! :(

sofern die prozedur LoeschenLV; im OnChange - Event steht,
wird eine AV ausgelöst. :wall:

Edit: Die Prozedur löscht den Inhalt und alle Spalten.

alcaeus 3. Mai 2004 19:16

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
Ohne code wirst du hier nicht viel erreichen...poste mal die Prozedur LoeschenLV, dann kann ich vielleicht auch sagen, wo das Problem ist.

shareholder 3. Mai 2004 19:19

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
Delphi-Quellcode:
procedure TMainForm.ResetLV;
begin
    if (LVExts.ViewStyle = vsReport) then
      LVExts.Columns.Clear;

    if (LVExts.LargeImages.Count > 0) then
      LVExts.LargeImages.Clear;
    if (LVExts.SmallImages.Count > 0) then
      LVExts.SmallImages.Clear;

    LVExts.Clear;
end;
danke!

alcaeus 3. Mai 2004 19:22

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
Hmm, sieht ganz ok aus, wobei der Name da was vermuten lässt...handelt es sich sicher um die richtige Prozedur? Versuche mal, einzeln die if-Blöcke zu aktivieren, und den Rest auszukommentieren. Vielleicht funktioniert das..

Gollum 3. Mai 2004 19:25

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
Hallo,

mich wundert etwas, dass Du die Images löscht?

Vielleicht könnte statt

Delphi-Quellcode:
...
LVExts.Clear
...
folgendes helfen:

Delphi-Quellcode:
if (LVExts.Items.Count>0) then LVExts.Items.Clear;

shareholder 3. Mai 2004 19:26

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
ok, danke. das war eine gute idee !

hier dran liegt's:

Delphi-Quellcode:
if (LVExts.LargeImages.Count > 0) then
  LVExts.LargeImages.Clear;
if (LVExts.SmallImages.Count > 0) then
  LVExts.SmallImages.Clear;
aber was genau ist falsch? :gruebel:

edit: Ok, Gollum war schneller ! Danke Euch beiden! :)
edit2: Ich habe Gollum's Variante genommen.

Problem gelöst

Gollum 3. Mai 2004 19:36

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
Hallo,

da ich nicht genau weiss, wie Du die Liste füllst, kann ich nur raten:

Du weist Deinen ListItems über ImageIndex einen Index der ImageList zu. Wenn Du nun die Einträge der Imagelist vor den Einträgen der Listview löscht, ist die Referenz nicht mehr gegeben.

U.U. könnte zuerst ein löschen der Listvieweinträge und daran anschließend ein löschen der Imagelisteinträge klappen.

shareholder 3. Mai 2004 19:56

Re: PageControl , Ereignis wenn neue TabSheet angeklickt wur
 
kann es sein, das mit ListView.Clear; auch gleich die imagelists mitgelöscht werden?

edit: nein, das kann nicht sein. hab nach dem löschen der Elemente die Index der Images aus der ImageList im memo ausgegeben. :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr.
Seite 1 von 2  1 2      

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