![]() |
Anzahl Formulare / Dynamisch Klassen ansprechen?
moin moin,
ja, ich habe bereits die suchfunktion genutzt und einen hinweis darauf erhalten, dass "Screen.FormCount" das sein soll, was ich benötige. Ist es aber leider offensichtlich nicht ganz.
Delphi-Quellcode:
Problem: Ich habe derzeit 3 Formulare, die for geht also von 0 - 2, das überschreitet dann aber den Listindex?
for j := 0 to screen.FormCount-1 do
for i := 0 to screen.forms[j].componentcount-1 do screen.forms[j].components[i].tag := ((j+1) * 10000) + i; Zitat:
Ideen? Edith meint: Kann es sein das "FormCount" eine andere Anzahl Formulare zurückgibt, als sich in dem Array "Forms" zurückgibt? |
Re: Anzahl Formulare in der Applikation
Zitat:
|
Re: Anzahl Formulare in der Applikation
FormCount beinhaltet zB 2
dann geht deine Schleife 0 1 2 das Array hat die Felder 0 1 :zwinker: |
Re: Anzahl Formulare in der Applikation
Zitat:
Zitat:
Klappen tut es leider auch mit -1 nicht. |
Re: Anzahl Formulare in der Applikation
Und mit -1 kommt der Fehler auch?
|
Re: Anzahl Formulare in der Applikation
Zitat:
Ich habe 3 Forms. TfrmMain TfrmLogin TfrmAddEntry in der TfrmMain wird das ganze gemacht und die for geht bis zum Index 3 (???).
Delphi-Quellcode:
for j := 0 to screen.FormCount-1 do
for i := 0 to screen.Forms[j].ComponentCount-1 do screen.Forms[j].Components[i].Tag := ((j+1) * 10000) + i; for i := 0 to screen.Forms[j].ComponentCount-1 do if (screen.Forms[j].Components[i] is TButton) or (screen.Forms[j].Components[i] is TToolButton) or (screen.Forms[j].Components[i] is TLabel) or (screen.Forms[j].Components[i] is TMenuItem) or (screen.Forms[j].Components[i] is TCheckBox) or (screen.Forms[j].Components[i] is TRadioButton) or (screen.Forms[j].Components[i] is TTabSheet) or (screen.Forms[j].Components[i] is TSpeedButton) then begin if screen.Forms[j].Components[i] is TButton then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TButton(screen.Forms[j].Components[i]).Caption); if screen.Forms[j].Components[i] is TToolButton then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TToolButton(screen.Forms[j].Components[i]).Caption); if screen.Forms[j].Components[i] is TLabel then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TLabel(screen.Forms[j].Components[i]).Caption); if screen.Forms[j].Components[i] is TMenuItem then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TMenuItem(screen.Forms[j].Components[i]).Caption); if screen.Forms[j].Components[i] is TCheckBox then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TCheckBox(screen.Forms[j].Components[i]).Caption); if screen.Forms[j].Components[i] is TRadioButton then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TRadioButton(screen.Forms[j].Components[i]).Caption); if screen.Forms[j].Components[i] is TTabSheet then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TTabSheet(screen.Forms[j].Components[i]).Caption); if screen.Forms[j].Components[i] is TSpeedButton then handleList.Add(IntToStr(screen.Forms[j].Components[i].Tag)+'='+TSpeedButton(screen.Forms[j].Components[i]).Caption); end; end; Ach ja, wenn jemand einen -sauberen- (!) weg kennt, alle Captions von Componenten, die Captions haben dürfen in eine Liste zu speichern, immer her damit. Damit ärgere ich mich nämlich schon geraume Zeit herum. Der Code ist mittlerweile auch ziemlich Dirty, da ich ständig dran rumändere. |
Re: Anzahl Formulare in der Applikation
Zuerst einmal fällt mir auf, dass da ein begin-end-Block fehlt. Eigentlich müsste auch eine Compiler-Warnung kommen, dass j nach Schleifendurchlauf undefiniert sei. Und evtl. könntest Du es mal mit RTTI versuchen, aber damit kenn ich mich auch nicht aus, die Forensuche sollte da aber weiterhelfen.
|
Re: Anzahl Formulare in der Applikation
Zitat:
Danke, begin / end.. man. Ist noch zu früh ;) |
Re: Anzahl Formulare in der Applikation
Formatieren hilft ;) Der Code mit den If's sieht ja grausam aus.
|
Re: Anzahl Formulare in der Applikation
Zitat:
Delphi-Quellcode:
if handleList.Count = 0 then
begin frmMain.handleList.Clear; for j := 0 to screen.FormCount-1 do begin for i := 0 to screen.Forms[j].ComponentCount-1 do begin screen.Forms[j].Components[i].Tag := ((j+1) * 10000) + i; end; for i := 0 to screen.Forms[j].ComponentCount-1 do begin comp := screen.Forms[j].Components[i]; if (comp is TButton) or (comp is TToolButton) or (comp is TLabel) or (comp is TMenuItem) or (comp is TCheckBox) or (comp is TRadioButton) or (comp is TTabSheet) or (comp is TSpeedButton) then begin if comp is TButton then handleList.Add(IntToStr(comp.Tag)+'='+TButton(comp).Caption); if comp is TToolButton then handleList.Add(IntToStr(comp.Tag)+'='+TToolButton(comp).Caption); if comp is TLabel then handleList.Add(IntToStr(comp.Tag)+'='+TLabel(comp).Caption); if comp is TMenuItem then handleList.Add(IntToStr(comp.Tag)+'='+TMenuItem(comp).Caption); if comp is TCheckBox then handleList.Add(IntToStr(comp.Tag)+'='+TCheckBox(comp).Caption); if comp is TRadioButton then handleList.Add(IntToStr(comp.Tag)+'='+TRadioButton(comp).Caption); if comp is TTabSheet then handleList.Add(IntToStr(comp.Tag)+'='+TTabSheet(comp).Caption); if comp is TSpeedButton then handleList.Add(IntToStr(comp.Tag)+'='+TSpeedButton(comp).Caption); end; end; end; end; Habe ich grade ;) Wurde langsam wirklich unübersichtlich. Gefallen tut mir die Lösung aber dennoch nicht. Stichwort: Mehrsprachigkeit. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 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-2025 by Thomas Breitkreuz