![]() |
Alle Timages mit einem Befehl unsichtbar machen
Hallo.
Ich bin absoluter anfänger und hoffe hier kann mir jmd. helfen. Gibt es einen Befehl, mit dem ich ganz einfach alle TImages auf einmal unsichtbar machen kann? Ich habe 7 Images auf einem Form wobei immer nur ein bestimmtes angezeigt werden soll. Bisher habe ich es immer so gemacht. elb.show; ebh.Visible := false; hbg.Visible := false; hbk.visible := false; hhk.visible := false; hhg.visible := false; Da nun aber immer mehr Bilder hinzukommen, sollen erst einmal alle TImages auf visible := false gesetzt werden. Danach möchte ich ein bestimmtes Bild wieder anzeigen. Ich möchte aber auch vermeiden, dass ich immer jedes einzelne Image manuell auf false setzen muss. Wär super wenn ich von euch irgendwie eine eingebung bekomme. |
AW: Alle Timages mit einem Befehl unsichtbar machen
Schreibe dir eine kleine Funktion, die alle Images versteckt.
Dann einfach diese Funktion aufrufen und danach ein Bild wieder sichtbar machen ;-) |
AW: Alle Timages mit einem Befehl unsichtbar machen
Delphi-Quellcode:
procedure TMyForm.ShowImageHideOther(Image: TImage);
var i: Integer; begin for i := 0 to Pred(ControlCount) do if (Controls[i] is TImage) then TImage(Controls[i]).Visible := Controls[i] = Image; end; |
AW: Alle Timages mit einem Befehl unsichtbar machen
In einer Schleife alle Controls durchgehn, von denen die Form der Owner ist,
deren Typen (via IS) auf TImage prüfen und bei denen das Visible setzen. Die VCL setzt standardmäßig den Owner für alle geladene Komponenten auf die Form. [edit] Daß hier auch alle gleich alles vormachen müssen ... wie soll man denn da sein Programm selber schreiben? :stupid: |
AW: Alle Timages mit einem Befehl unsichtbar machen
Zitat:
Grüsse, Dirk |
AW: Alle Timages mit einem Befehl unsichtbar machen
Nja, auch wenn die Form nicht der Parent ist, wird sie dennoch der Owner sein.
Liegt die Komponente auf einem Panel, ist das Panel der Parent und die Form der Owner. (wenn die Form über die VCL aus einer DFM geladen wurde) Da gibt es ja zwei Listen in TContols/TWinControls? Ich glaub .Components und .Controls - das Eine für die Parent-Verknüpfungen und das Andere für die Owner-Verknüpfungen. |
AW: Alle Timages mit einem Befehl unsichtbar machen
Jap, Controls für den Parent-Bezug, Components für Owner.
Zitat von Nightblade: "7 Images auf einer Form".. auch wenn er sich selbst um die Freigabe kümmert ".Create(nil)" sollten die Images somit in Controls[] auftauchen. Ist aber Erbsenzählerei, vermutlich funktioniert beides :) |
AW: Alle Timages mit einem Befehl unsichtbar machen
Hallo.
Vielen Dank für die Super schnelle Antwort hätte nicht gedacht das es so schnell geht. Nun steh ich aber vor dem nächsten Problem. Ich habe mir erlaubt, die procedur von Tryer zu übernehmen und nur das Formular (MyForm in das abzuändern wie es bei mir heißt. TLeitern). Ich habe schon überall geschaut aber wie ich ein procedure einbinde habe ich leider nicht für absolute anfänger wie mich gefunden. So weit waren wir damals in der Schule leider nie. Die Hilfe in meinem Delphi geht auch nicht, da ich dummerweise nur noch Vista habe und Delphi7 diese nicht unterstützt. Deshalb muss ich leider noch mal fragen. Wo muss ich die Procedure einbinden. Ich habe Sie jetzt unter Private eingebunden, weil (soweit denke ich zu verstehen) Delphi selbst geschriebene Procedures an den stellen Private, Public etc. sucht. Nun ist auch die Fehlermeldung `'Undeclared Identifier: 'ShowImageHideOther' verschwunden. Dafür kommt nun: 'Undeclared Identifier: 'TLeitern' Hier der betroffene Quelltext:
Delphi-Quellcode:
Ich sollte vlt. noch anmerken, dass mein Programm diverse TForms nutzt, die in bestimmter reihenfolge angezeigt werden. Sollte aber soweit ich verstanden habe egal sein, da der Befehl den ich versuche zu nutzen nur in diesem Form genutzt werden soll.
unit Leiter;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Grids, Outline, DirOutln, Menus, Daten, jpeg, Buttons; type TLeitern = class(TForm) bh: TEdit; prl: TEdit; hhk: TImage; hbk: TImage; hbg: TImage; hhg: TImage; ebh: TImage; hbk2: TImage; ebg: TImage; ebtk: TImage; ebtg: TImage; hbk3: TImage; dmgp: TLabel; dmlp: TLabel; lp: TEdit; gp: TEdit; Button1: TButton; Button2: TButton; Label2: TLabel; Label10: TLabel; Image1: TImage; Label1: TLabel; Image2: TImage; Label4: TLabel; Label6: TLabel; elb: TImage; ebk: TImage; MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; Gehezu1: TMenuItem; Begrung1: TMenuItem; Schwimmbeckenauswahl11: TMenuItem; Leiterauswahl21: TMenuItem; Filterauswahl31: TMenuItem; Skimmer41: TMenuItem; Bodenreinigungsset51: TMenuItem; Abschluseite61: TMenuItem; Label8: TLabel; Speichernffnen1: TMenuItem; form: TEdit; GertezurWassererwrmung41: TMenuItem; SolardurBerechnung1: TMenuItem; WeitereArtikel1: TMenuItem; LetzteAktiveSeite1: TMenuItem; neing: TRadioButton; heing: TRadioButton; eing: TRadioButton; Leiterauswahl: TComboBox; Memo1: TMemo; leitergelenk: TCheckBox; Memo2: TMemo; lg: TEdit; Label3: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure lpChange(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Begrung1Click(Sender: TObject); procedure Schwimmbeckenauswahl11Click(Sender: TObject); procedure Leiterauswahl21Click(Sender: TObject); procedure Filterauswahl31Click(Sender: TObject); procedure Skimmer41Click(Sender: TObject); procedure Bodenreinigungsset51Click(Sender: TObject); procedure Abschluseite61Click(Sender: TObject); procedure prlChange(Sender: TObject); procedure Speichernffnen1Click(Sender: TObject); procedure GertezurWassererwrmung41Click(Sender: TObject); procedure SolardurBerechnung1Click(Sender: TObject); procedure ebgClick(Sender: TObject); procedure ebgDblClick(Sender: TObject); procedure WeitereArtikel1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel1Click(Sender: TObject); procedure LeiterauswahlChange(Sender: TObject); procedure neingClick(Sender: TObject); procedure heingClick(Sender: TObject); procedure eingClick(Sender: TObject); procedure leitergelenkClick(Sender: TObject); private procedure TLeitern.ShowImageHideOther(Image: TImage); {Von mir eingebundene Procedur} { Private-Deklarationen } public { Public-Deklarationen } end; var i: Integer; Leitern: TLeitern; implementation uses Skimer, Pool, Unit1, beg, unit2, endp, savef, acht, Rund, oval, Unit3, Unit4, art, recht; {$R *.DFM} procedure TLeitern.ShowImageHideOther(Image: TImage); {Geänderte procedure von Tryer} var i: Integer; begin for i := 0 to Pred(ControlCount) do if (Controls[i] is TImage) then TImage(Controls[i]).Visible := Controls[i] = Image; end; end; Vielen Dank schon mal für eure Hilfe. |
AW: Alle Timages mit einem Befehl unsichtbar machen
Delphi-Quellcode:
->
private
procedure TLeitern.ShowImageHideOther(Image: TImage); {Von mir eingebundene Procedur} { Private-Deklarationen } public
Delphi-Quellcode:
Grüße
private
procedure ShowImageHideOther(Image: TImage); {Von mir eingebundene Procedur} { Private-Deklarationen } public Klaus |
AW: Alle Timages mit einem Befehl unsichtbar machen
Danke. Manchmal kann es so einfach sein.
Wahrscheinlich auch bei der dummen Frage wie ich die Procedure anspreche. Wie bringe ich das Programm dazu, die erstellte Funktion bei nem OnChange einer checkbox zu reagieren? Bitte auch hier noch mal ne Hilfe. Danke schon mal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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