![]() |
Instanzierte Formulare ermitteln
Hallo zusammen,
folgendes Problem : ich rufe 3 mal die procedur auf: procedure Tdmbspiel.showformular(caption:String); begin frmNormal := TfrmNormal.Create(Self,caption); frmNormal.Show; end; Jetzt habe ich 3 mal das gleiche formular mit dem gleichen formularnamen, unterschiedlichen captions. Hintergrund: Ich pflege stammdaten, welche immer die gleiche struktur haben, will aber nur ein formular dafür haben. Wie kann ich nun verhindern, dass ein formular mit der gleichen caption nicht zweimal aufgeht? Nochmal: Ich möchte nicht showmodal haben, showmodal würde nur zum einmaligen öffnen des formulares führen. Ich brauch das ding parallel, aber nur einmal pro bereich offen. 'Caption1' = offen; 'Caption2' = offen. beim erneuten aufruf von create(self,'caption2') soll nix passieren. ich hoffe ich habe ausführlich erklärt auf was ich hinausmöchte. Ich habe also ein instanziertes formular und möchte quasi das formular, wenn es mit den bedinungen schon offen ist, nicht nochmal öffnen können. danke vorab für infos und hilfe coderi |
AW: Instanzierte Formulare ermitteln
Vielleicht hilft Dir dieser Schnipsel - ist bei uns zum Schauen, ob es Modal irgendwo auf ist:
Delphi-Quellcode:
for I := 0 to Screen.FormCount - 1 do
if (ansiUpperCase(Screen.Forms[I].Caption) = ansiUpperCase(UeCaption)) then begin ..Nicht mehr öffnen, nach vorne holen end; |
AW: Instanzierte Formulare ermitteln
Folgende Procedure prüft, ob ein Formular schon offen ist und erzeugt es ggf. neu:
Delphi-Quellcode:
function FindOrCreateForm(FormClass: TFormClass; var Reference):Boolean;
var i : Integer; begin for i := Screen.CustomFormCount-1 downto 0 do begin if Screen.CustomForms[i].ClassType = FormClass then begin TCustomForm(Reference) := Screen.CustomForms[i]; Result := True; // gefunden Exit; end; end; Application.CreateForm(FormClass, Reference); Result := False; // neu erzeugt end; |
AW: Instanzierte Formulare ermitteln
Zitat:
Folgender Schnipsel erzeugt das Form wenn es nicht existiert und löscht es, wenn es existiert. Kannst du ja entsprechend abändern.
Delphi-Quellcode:
if frmNormal = nil then
begin frmNormal := TfrmNormal.Create(Self,caption); frmNormal.Show; end else begin frmNormal.Hide; FreeAndNil(frmNormal); end; |
AW: Instanzierte Formulare ermitteln
Formulare sollten nicht mit Free oder FreeAndNil() freigegeben werden, sondern mit Release.
Grund steht in der Delphi-Hilfe zu Release. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr. |
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 by Thomas Breitkreuz