AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Probleme mit dem Freigeben von TabSheets

Probleme mit dem Freigeben von TabSheets

Offene Frage von "r2c2"
Ein Thema von r2c2 · begonnen am 11. Jun 2005 · letzter Beitrag vom 16. Jun 2005
 
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#1

Probleme mit dem Freigeben von TabSheets

  Alt 11. Jun 2005, 13:39
Hallo an alle,

Ich programmiere gerade n ersatz für das Startmenü. D.h. das Prog hab ich schon vor ca. 2 Jahren programmiert, aber

dementsprechend sieht es auch aus: keine OOP, schlechter Programmierstil...

Ich wollte das dann mal verbessern. Soweit hab ich das - im Groben - auch fertig, nur hab ich komischerweise Probleme

mit dem Free von den TabSheets:

So hab ich das ursprünglich gemacht:

Delphi-Quellcode:
procedure TUEAppBar.DeleteGroupSBClick(Sender: TObject);
var
  GroupName: String;
  MsgText: String;
  List: TStringList;
  i: Integer;
begin
  GroupName := PageControl1.ActivePage.Caption;
  MsgText := 'Soll die Gruppe "' + GroupName + '" wirklich gelöscht werden?';
  if MessageDlg(MsgText, mtConfirmation, mbOKCancel, 0) = mrOK then
  begin
    if DeleteDir(ExtractFilePath(ParamStr(0)) + 'Links\' + PageControl1.ActivePage.Caption) then
    begin
      for i := 0 to PageControl1.ActivePage.ComponentCount -1 do // das hätte Probleme gegeben, wenn ComponentCount nicht 1 gewesen wäre ;-)
      begin
        PageControl1.ActivePage.Components[i].Free; // wäre eigentlich unnötig,
      end;
      PageControl1.ActivePage.Free; // weil heimit doch eigentlich alles freigeben wird
      List := TStringList.Create;
      try // zu der Zeit kannte ich scheinbar FindFirst/Next noch nicht, also hab ich die zu öffnenden Order in ner TextDatei gespeichert
        List.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'UEAppBar.dat');
        List.Delete(List.IndexOf(GroupName));
        List.SaveToFile(ExtractFilePath(ParamStr(0)) + 'UEAppBar.dat');
      finally
        List.Free;
      end;
    end
    else
    begin
      ShowMessage('Ein Fehler ist aufgetreten! Gruppe konnte nicht gelöscht werden.');
    end;
  end;
end;
Jetzt mach ich das so:

Delphi-Quellcode:
procedure TUEAppBar.DeleteGroupSBClick(Sender: TObject);
var
  GroupName: String;
  MsgText: String;
begin
  GroupName := PageControl1.ActivePage.Caption;
  MsgText := 'Soll die Gruppe "' + GroupName + '" wirklich gelöscht werden?';
  if MessageDlg(MsgText, mtConfirmation, mbOKCancel, 0) = mrOK then
  begin
   if Groups.DeleteGroup(GroupName) then
     MessageDlg('Die Gruppe "' + GroupName + '" wurde gelöscht!',
       mtInformation, [mbOK], 0);
  end;
end;
Das eigentliche Löschen passiert in der Klasse TGroups:

Delphi-Quellcode:
function TGroups.DeleteGroup(const AName: string): Boolean;
var i: Integer;
begin
  Result := False;
  if DeleteDir(ExtractFilePath(ParamStr(0)) + 'Links\' + AName) then
  begin
    FPageControl.ActivePage.Free; // FPageControl is n Pointer auf das PageContol auf der Form
    Result := True;
  end;
end;
Ich bekomme leider immer ne AccessViolation. Und zwar direkt nach dem Anzeigen des MessageDlg: "Die Gruppe wurde

gelöscht". Wenn ich mit [F8] duchsteppe, komme ich auch nicht weiter, die AV kommt direkt nach der Message.

Ich hab schon versucht
- direkt im Click-Ereignis zu löschen(also ohne den Pointer) --> funktioniert auch nicht
- die Componenten auf dem TabSheet manuell freizugeben --> funktioniert auch nicht
- alle TabSheets zu löschen und dann neu anzuzeigen --> auch das funktioniert nicht

Teilweise - je nachdem, wie ich meinen Quelltext umbaue - erhalte ich auch ne AV an der Adresse 0.

Weil ich auch in manchen Fällen die Meldung erhalte, dass das Objekt '' kein Parent hat, bin ich auf die Idee gekommen,

dass schon beim Erstellen der TabSheets was nicht stimmt:

Delphi-Quellcode:
function TGroups.CreateTab(AName: string): TShellListView;
var
  Tab: TTabSheet;
  ListView: TShellListView;
  i: Integer;
begin
  Tab := TTabSheet.Create(FPageControl);
  Tab.PageControl := FPageControl;
  Tab.Parent := FPageControl;
  Tab.Caption := AName;
  ListView := TShellListView.Create(Tab);
  ListView.Parent := Tab;
  ListView.Align := alClient;
  ListView.BorderStyle := bsNone;
  ListView.FlatScrollBars := True;
  ListView.HotTrackStyles := [htHandPoint, htUnderlineHot];
  ListView.MultiSelect := False;
  ListView.ViewStyle := vsReport;
  ListView.ShowColumnHeaders := False;
  ListView.HideSelection := True;
  ListView.Root := ExtractFilePath(ParamStr(0)) + 'Links\' + AName;
  ListView.OnMouseDown := ShellListViewMouseDown;
  ListView.AutoRefresh := True;
  for i := ListView.Columns.Count -1 downto 1 do
  begin
    ListView.Columns.Items[i].Free;
  end;
  Result := ListView;
end;
Da find ich aber auch keinen Fehler. Der Leerstring in der Fehlermeldung kommt wahrscheinlich daher, dass ich den Tabs

keinen Namen verpasst habe. Wenn ich das ändere, bekomme ich aber wieder die AV und nicht die Kein-Parent-Meldung,

ich kann also schlecht sagen, obs an den TabSheets, oder an den ShellListViews hängt.

Irgendwo muss ich was ganz dummes falsch geacht haben. Ich hab nur keine Ahnung was!

mfg

Christian

P.S.: @Mods: bin mir nicht sicher, ob ich hier richtig bin, wenn nicht, einfach verschieben...

Anhang: Im Anhang is der komplette Quelltext, wenn den jemand 'braucht'...
Angehängte Dateien
Dateityp: zip appbar_727.zip (25,3 KB, 5x aufgerufen)
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:30 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