AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Alle Timages mit einem Befehl unsichtbar machen
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Timages mit einem Befehl unsichtbar machen

Ein Thema von Nightblade · begonnen am 23. Jul 2011 · letzter Beitrag vom 27. Jul 2011
Antwort Antwort
Nightblade

Registriert seit: 19. Jul 2011
6 Beiträge
 
#1

Alle Timages mit einem Befehl unsichtbar machen

  Alt 23. Jul 2011, 19:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 23. Jul 2011, 19:52
Schreibe dir eine kleine Funktion, die alle Images versteckt.
Dann einfach diese Funktion aufrufen und danach ein Bild wieder sichtbar machen
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#3

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 23. Jul 2011, 20:01
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#4

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 23. Jul 2011, 20:03
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#5

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 23. Jul 2011, 21:53
Die VCL setzt standardmäßig den Owner für alle geladene Komponenten auf die Form.
Wobei hier ausschlaggebend ist das die Form der Parent ist und somit für die Darstellung verantwortlich. Sonst würde man mit Components[] und ComponentCount arbeiten.

Grüsse, Dirk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#6

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 23. Jul 2011, 22:05
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#7

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 23. Jul 2011, 22:15
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
  Mit Zitat antworten Zitat
Nightblade

Registriert seit: 19. Jul 2011
6 Beiträge
 
#8

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 26. Jul 2011, 20:25
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:
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;
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.

Vielen Dank schon mal für eure Hilfe.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 26. Jul 2011, 20:31
Delphi-Quellcode:
  private
   procedure TLeitern.ShowImageHideOther(Image: TImage); {Von mir eingebundene Procedur}
    { Private-Deklarationen }
  public
->
Delphi-Quellcode:
  private
   procedure ShowImageHideOther(Image: TImage); {Von mir eingebundene Procedur}
    { Private-Deklarationen }
  public
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Nightblade

Registriert seit: 19. Jul 2011
6 Beiträge
 
#10

AW: Alle Timages mit einem Befehl unsichtbar machen

  Alt 27. Jul 2011, 20:10
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:04 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