AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Änderung der Eigenschaft "Visible" hat keine Auswirkung
Thema durchsuchen
Ansicht
Themen-Optionen

Änderung der Eigenschaft "Visible" hat keine Auswirkung

Ein Thema von Whistler · begonnen am 24. Aug 2004 · letzter Beitrag vom 24. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#1

Änderung der Eigenschaft "Visible" hat keine Auswi

  Alt 24. Aug 2004, 15:19
Hallo,

ein komisches Problem:
Ich habe einen Button "Button1". Wenn man darauf klickt, soll die Eigenschaft "Visible" der Komponente "Label1" auf "false" geändert werden. Entsprechend der Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Visible := false;
end;
Funktioniert auch.

Aber exakt dieser Code hat in einem anderen Projekt absolut keine Auswirkungen. Hier ist das "Label" auf ein "PageControl"-Element gesetzt, welches selbst auf einem Panel sitzt. Tests haben aber gezeigt, dass dies egal - ich kann (wüsste auch keinen Grund wieso nicht) jedes Element (immer) ansteuern.

Ich habe selbst eine If-Abfrage geschaltet, die mir eine Meldung ausgeben soll. Hier wird korrekt angezeigt, dass das Label "Visible = false" als Wert hat. Aber es wird immer noch angezeigt?!
mfg

Whistler
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#2

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 15:25
Hi,

bei einem PageControl-Element muss Du auch die aktive Seite auswählen, z.B.:

PageControl1.ActivePageIndex := 1; Das sollte funzen

  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 15:27
Zitat von MarcusB:
Hi,

bei einem PageControl-Element muss Du auch die aktive Seite auswählen, z.B.:

PageControl1.ActivePageIndex := 1; Das sollte funzen

...das PC-Element ist aktiv.
mfg

Whistler
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 15:32
Du mußt wohl dem PageControl mitteilen, daß es da was neuzeichnen soll. Schau dir mal die Methode Invalidate an.

Grüße
mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
MarcusB

Registriert seit: 7. Mär 2004
121 Beiträge
 
Delphi 7 Professional
 
#5

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 15:33
Uuups, da habe ich was überlesen.

Habe aber deinen Fall mal nachgebaut, quasi PageControl mit einem Panel, darauf ein Label.
Hat aber funktioniert. Das Label ist bei visible:=false weg
  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 15:44
Ja... ich sag ja auch:
In einer Test-App (also einfach neue "EXE", Panel drauf und PC sowie eine "Seite" und Label und ein Button), geht.

Ich frage mich daher, wieso geht's in der anderen Anwendung nicht.
mfg

Whistler
  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 17:14
Ich verstehe es nicht...

'Ne Frage: Wenn folgender Code zusätzlich ausgeführt wird in der Prozedur, kann dass das Ausführen von "visible := false" verhindern?

Delphi-Quellcode:
procedure TMain.pd_MainRund;
begin
    Label2.Visible := false;
    lbl_pDialog2_S5_Hinweis.Visible := false;

      bt_pNavigation_Start.Enabled := false;

while ProgressBar2.Position <100 do
    begin
      Progressbar2.Position := ProgressBar2.Position + 25;
      Sleep(1000);
    end;
    pd_fertig;
end;
Hintergrund ist der:
User klickt auf Button "Start". Hier wird nur zur Prozedur "pd_MainRund" gesprungen. Hier soll er dann den Hinweis, dass er auf Start drücken soll, ausblenden... und den Vorgang starten. Da es noch kein Vorgang gibt, simuliere ich Mittels "while" das Füllen des Progress-Balkens...
Wenn ich die While-Schleife herausnehme - geht's.
mfg

Whistler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 17:22
dadurch das danach noch anweisungen kommen wird noch kein repaint ausgelöst. du müsstest dann in dem Fall hinter dein
Label2.visible := false; ein
Application.ProcessMessages; einfügen oder einfach ein
Label2.Repaint; übrigens kannst du auch
Label2.Hide; nehmen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Whistler

Registriert seit: 2. Mär 2004
98 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 17:28
Zitat:
dadurch das danach noch anweisungen kommen wird noch kein repaint ausgelöst.
Könntest du das ausführen? Denn eigentlich geht er doch Schritt für Schritt alles ab und nicht erst alles durch...

BTW: "Application.ProcessMessages;" hat geholfen...
mfg

Whistler
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Änderung der Eigenschaft "Visible" hat keine A

  Alt 24. Aug 2004, 18:13
Zitat von Whissi:
Zitat:
dadurch das danach noch anweisungen kommen wird noch kein repaint ausgelöst.
Könntest du das ausführen? Denn eigentlich geht er doch Schritt für Schritt alles ab und nicht erst alles durch...

BTW: "Application.ProcessMessages;" hat geholfen...
Das Problem ist ja gerade, dass alles Schritt für Schritt durchgegangen wird . Ein Setzen von Visible:=false ist ja zunächst mal nur eine Änderung einer Variablen. Damit aber eine sichtbare Veränderung eintritt muss zusätzlich noch neugezeichnet werden, und das muss explizit veranlasst werden, da die Zuweisung an die Visible-Eigenschaft dies nicht für dich mit erledigt.
Für gewöhnlich wird ein Control immer neugezeichnet, wenn es selbst, oder eines der Unter-Controls geändert wird - aber das passiert per Message an das entsprechende Control. So lange wie in deinem Programm aber noch etwas passiert, werden keine weiteren Messages verarbeitet, und kommen in eine Warteschlange. Der Aufruf von Application.ProcessMessages veranlasst dein Programm die anstehende Warteschlange abzuarbeiten, und dann erst weiterzumachen.
In diesem Fall werden allerdings alle anstehenden Messages versorgt, also auch Mausclicks, Tastatureingaben etc.pp. Wenn du nur neuzeichnen willst, dann ist (auch schneller) TControl.Repaint bzw. .Refresh dein Kandidat. Dabei wird explizit ein erneutes Zeichnen veranlasst, ohne dass sich um die Message-Queue gekümmert wird.

gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:19 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