Den von AutoSize zugewiesenen Wert bestimmen
-
Hallo
Im Event TPanel::OnResize bekommst du den Wert nach der Änderung.
bis bald
akari
-
Es klappt!!
void __fastcall TForm1::FormCreate(TObject *Sender) { const unsigned short int anzX = 3; const unsigned short int anzY = 3; const unsigned int breite_label = 50; const unsigned int hoehe_label = 50; const unsigned int abstand = 5; Feld* label[anzY][anzX]; for(int i = 0; i < anzY; i++) { for(int j = 0; j < anzX; j++) { label[i][j] = new Feld("i"+IntToStr(i)+"_j"+IntToStr(j), this, Panel1, breite_label, hoehe_label, i*(hoehe_label+abstand), j*(breite_label+abstand) ); label[i][j]->OnClick = onClick; } } this->Width = anzX* (breite_label+abstand)+250; this->Height = anzY* (hoehe_label+abstand)+250; Panel1->OnResize = adjust; this->OnResize = Panel1->OnResize; } //--------------------------------------------------------------------------- void __fastcall TForm1::adjust(TObject *Sender) { Panel1->Left = (this->Width - Panel1->Width) / 2; Panel1->Top = (this->Height - Panel1->Height) / 2; }
Die Methode heißt OnResize.
Gibt es eigentlich auch anonyme Funktionen in C++?
-
ichbinsnur123 schrieb:
Gibt es eigentlich auch anonyme Funktionen in C++?
Was sollen denn anonyme Funktionen sein? Jede Funktion hat ja einen Namen, von daher wohl eher nicht.
-
Naja, in JavaScript gibts funktionen, die keinen Namen haben und Events zugewiesen werden können, ohne den globalen Namesnraum zuzuballern.
Aber so wichtig ist das auch nicht. War mehr eine Interessensfrage.
Das würde dann so aussehen:
Objekt->onEvent = void { do_something }
-
ichbinsnur123 schrieb:
Gibt es eigentlich auch anonyme Funktionen in C++?
Im Moment gibt es die boost::lambda Bibliothek, die unbenannte Funktionsobjekte bereitstellt, was wohl auf sowas wie anonyme Funktionen hinausläuft. Wenn ich mich richtig erinnere sollen lambda Funktionen ab der nächsten Sprachversion (die innerhalb der nächsten 1-2 Jahre verabschiedet werden soll) Bestandteil des Sprachumfangs sein.
-
Achso, ok.
In PHP gibts das ab Version 5.3 ja auch
-
Ich glaube, den Sinn von anonymen Funktionen werde ich nie begreifen. Man sollte das Kind schon bei Namen nennen.
-
Gerade bei Event-Methoden finde ich das ziemlich brauchbar.
Ansonsten fällt mir auch keine Anwenudng dazu ein.Ich hab nochmal ne Frage!
Und zwar möchte ich das Panel IMMER mittig in meinem Fenster haben, was so auch geht:
void __fastcall TForm1::adjust(TObject *Sender) { Panel1->Left = (this->Width - Panel1->Width) / 2 -3; Panel1->Top = (this->Height - Panel1->Height -27) / 2; // 27 ist die Höhe der Titelleiste }
Aber wie ihr seht, habe ich bei der X-Koordinate 3px abgezogen, weil es sonst nicht genau mittig war.
Bei der Y-Koordinate musste ich 27px abziehen, weil es sonst um die Höhe der Titelleiste nach unten verschoben war.Was mich wundert, sind die 3px in der X-Richtung. WO kommen die her? Ich habe überall die Borders ausgeschaltet.
-
heini schrieb:
Ich glaube, den Sinn von anonymen Funktionen werde ich nie begreifen.
Vielleicht kann ich helfen. Wie sortierst du beispielsweise ein folgenden Vektor nach scope?
struct OptionSwitch { std::string name; int scope; }; std::vector <OptionSwitch> cont;
Mit anonymen Methoden bzw. Lambda-Expressions ist es ein Einzeiler:
std::sort (cont.begin (), cont.end (), [] (const OptionSwitch& lhs, const OptionSwitch& rhs) { return rhs.scope < lhs.scope; });
Ein anderer Anwendungsfall wäre die Verkettung zweier Funktionen:
template <typename T> std::function <T (T)> compose (std::function <T (T)> f, std::function <T (T)> g) { return [] (T x) { return f (g (x)); }; } std::function <double (double)> sinTanX = compose (std::sin, std::tan);
Edit: Dreizeiler -> Einzeiler
-
ichbinsnur123 schrieb:
Aber wie ihr seht, habe ich bei der X-Koordinate 3px abgezogen, weil es sonst nicht genau mittig war.
Bei der Y-Koordinate musste ich 27px abziehen, weil es sonst um die Höhe der Titelleiste nach unten verschoben war.Was mich wundert, sind die 3px in der X-Richtung. WO kommen die her? Ich habe überall die Borders ausgeschaltet.
Versuch's mal mit ClientWidth und ClientHeight.
@audacia: *Bahnhof*
Ich fuerchte, ich habe da noch etwas Nachholbedarf.