• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Panel aktivieren/zeigen

mewX

Wohlschmecker aus Vierlanden
Registriert
26.12.06
Beiträge
241
Tach... Ich habe mir ein kleines Projekt mit XCode gebaut, in dem es über den InterfaceBuilder halt ein Panel gibt, das ich gerne öffnen möchte... Kann das schwer erklären, aber wie lautet die FUnktion dazu? ;) Ich meine in etwa sowas:

[CounterWindow activate]; //Also das hab ich mir jetzt ausgedacht

CounterWindow ist schon ein

IBOutlet NSPanel *CounterWindow;

gruß und hoffe jemand versteht was ich meine^
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
[CounterWindow makeKeyAndOrderFront:nil]; vielleicht?

Aber du solltest alle dein Instanzvariablen mit kleinem Buchstaben beginnen lassen (=> counterWindow anstatt CounterWindow), damit du diese nicht mit Klassen verwechselst.
 

mewX

Wohlschmecker aus Vierlanden
Registriert
26.12.06
Beiträge
241
Danke, geht... Und jetzt die Umkehrung? Wie mache ich ein Fenster/Panel wieder unsichtbar?
Bzw wie kann man solche Sachen ansonsten schnell herausfinden?
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
Du kannst alles in der Dokumentation nachschlagen (Im Menü von Xcode findest du diese unter Help->Documentation). In diesem Fall musst du unter NSWindow nachschlagen, da dies die Methoden für jegliches Fenster, also auch ein Panel (Subklasse von NSWindow) beinhaltet.
Um das Fenster auszublenden musst du orderOut: verwenden.
 

mewX

Wohlschmecker aus Vierlanden
Registriert
26.12.06
Beiträge
241
Ah gut, da habe ich schon einiges gefunen jetzt...
Nur wie setze ich den Value von einem NSLevelIndicator? :) Das steht dooferweise nicht in der Dokumentation...
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Doch, das steht in der Dokumentation. NSLevelIndicatior ist eine Subklasse von NSControl und erbt daher alle Methoden von NSControl. Welche Methoden das sind, steht dann in der Dokumentation von NSControl. Die Vererbungshistorie steht immer ganz oben.

MacApple
 

mewX

Wohlschmecker aus Vierlanden
Registriert
26.12.06
Beiträge
241
Ahja, gut :)
Und noch 'ne Frage:
Irgendwie funktioniert sleep nicht so wie ich es haben will...
z.B.:

while (sekundenLeft > 0) {
sleep(1);
sekundenLeft = sekundenLeft - 1;
[secondsLeft setIntValue: sekundenLeft];
}
[secondsLeft setIntValue: sekundenLeft];

Die Sekunden in sekundenLeft werden abgearbeitet (also z.B. 10), aber das Textfeld "secondsLeft" wird nur einmal am Ende aktualisiert, also wenn's auf 0 kommt....
Erreichen will ich damit natürlich einen Countdown in "secondsLeft"...
Liegt das an der Schleife oder am sleep?
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Das liegt indirekt an der Schleife. Das Grafiksystem in Cocoa zeichnet nicht bei jeder Änderung sofort diese Änderung neu, sondern sammelt alle Änderungen und zeichnet sie dann in einem Rutsch. Wenn es notwendig ist, eine Änderung unmittelbar zu zeichnen, dann muss man das dem Objekt nur sagen. Das macht man mit der Methode "display". Du musst jetzt also nur noch in Deiner Schleife dem Textfeld die display-Nachricht schicken:
Code:
[secondsLeft display];
MacApple
 

mewX

Wohlschmecker aus Vierlanden
Registriert
26.12.06
Beiträge
241
Danke.
Und: Was ist hieran falsch:
prozentDone = (sekundenAnfang - sekundenLeft) / sekundenAnfang * 100;
?
Ich lasse mir den Prozentstatus in einem Textfeld ausgeben und wieder sprint er erst am Ende auf "100" (natürlich hab ich as Textfeld displayen lassen)... Und ich bin mir sicher dass das Textfeld aktuallisiert wird (mit nem anderen Wert gehts)... Also muss was an der Rechnung falsch sein.
prozentDone ist ein double..

EDIT:
Es geht, nachdem ich daraus das gemacht habe:

prozentDone = sekundenAnfang - sekundenLeft;
prozentDone = prozentDone / sekundenAnfang * 100;

Lag also vermutlich daran, dass beim ersten Mal noch kein double entsteht und sich das dewegen nicht teilen ließ oder sowas..

EDIT2:
Soo :) Und wie bekomme ich jetzt AppleScripte in mein Projekt? Bzw wie kann ich sie dann aus dem C-Code heraus ausführen?
 
Zuletzt bearbeitet:

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
Hast du dir schon NSAppleScript angeschaut?
 

mewX

Wohlschmecker aus Vierlanden
Registriert
26.12.06
Beiträge
241
Ja, aber da wird irgendwie schlecht beschrieben, wei man das benutzt.. Übehaubt fehlen mir ganz oft Beispiele in der Dokumentation...
Hab mir jetzt das zusammengereimt:
NSAppleScript *as; (in der .h)

(In der .m:)
[as initWithSource: @"TimeShutdown.applescript"];
[as compileAndReturnError:nil];
[as executeAndReturnError:nil];

Aber das Applescript wird nicht ausgeführt..
 

Squart

Pomme Etrangle
Registriert
29.01.04
Beiträge
910
@"TimeShutdown.applescript" soll eine Datei sein? Du musst natürlich den Quellcode reinsetzen, also so etwas wie [as initWithSource: @"say 'Hi'"];, aber dies steht mit Sicherheit alles in der Dokumentation.
 

mewX

Wohlschmecker aus Vierlanden
Registriert
26.12.06
Beiträge
241
Achso :) Ich dachte damit binde ich ne Source-Datei ein :) Gut