Schriftgöße proportional zur Fenstergöße
-
Gleiches Schema
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; float KonLabel1Size=0.00; float KonLabel1Top=0.00; float KonLabel1Left=0.00; float KonLabel2Size=0.00; float KonLabel2Top=0.00; float KonLabel2Left=0.00; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender) { KonLabel1Size=(float)Form1->Height/(float)Label1->Font->Size; KonLabel1Top=(float)Form1->ClientHeight/(float)Label1->Top; KonLabel1Left=(float)ClientWidth/(float)Label1->Left; KonLabel2Size=(float)Form1->Height/(float)Label2->Font->Size; KonLabel2Top=(float)Form1->ClientHeight/(float)Label2->Top; KonLabel2Left=(float)ClientWidth/(float)Label2->Left; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormResize(TObject *Sender) { Label1->Font->Size=(float)Form1->Height/KonLabel1Size; Label1->Top=(float)Form1->ClientHeight/KonLabel1Top; Label1->Left=(float)ClientWidth/KonLabel1Left; Label2->Font->Size=(float)Form1->Height/KonLabel2Size; Label2->Top=(float)Form1->ClientHeight/KonLabel2Top; Label2->Left=(float)ClientWidth/KonLabel2Left; } //---------------------------------------------------------------------------
Kann dann aber passieren das sich Felder schneiden, aber das kann man ja auch Abfangen.
-
Herzlichen Dank !!!
Problem: Ich habe insgesamt 15 verschiedene Texte-muss ich das jetzt für jeden einzeln schreiben oder gibt es eine vereinfachte Methode die alle berücksichtigt?
Problem: Wenn Darstellung nicht mehr proportional (4:3 -> 16:9) dann haut z.Bsp. die LEFT-Ausrichtung nicht mehr hin.
Hast du noch ne Idee ?
Thx@all
-
Das mit der Änderung der Auflösung hatte ich nicht bedacht, aber hier ein kleiner Ansatz es zu vereinfachen:
Bei der Funktion SetSize(...) musst du halt noch die übrigen Komponenten hinzufügen wie z.B. TMemo.
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //Anzahl der Felder const CouFeld=3; //Konstante für Labels {Size,Top ,Left} float KonLabel[CouFeld][3]={0.00,0.00,0.00}; void SetKonsSize(int id,int Size,int Top,int Left){ KonLabel[id][0]=(float)Form1->ClientHeight/(float)Size; KonLabel[id][1]=(float)Form1->ClientHeight/(float)Top; KonLabel[id][2]=(float)Form1->Width/(float)Left; }; void SetSize(TObject *Sender,int id){ try{ if(TLabel* Label = dynamic_cast<TLabel*>(Sender)){ Label->Font->Size=(float)Form1->Height/KonLabel[id][0]; Label->Top=(float)Form1->ClientHeight/KonLabel[id][1]; Label->Left=(float)Form1->ClientWidth/KonLabel[id][2]; }else if(TEdit* Label = dynamic_cast<TEdit*>(Sender)){ Label->Font->Size=(float)Form1->Height/KonLabel[id][0]; Label->Top=(float)Form1->ClientHeight/KonLabel[id][1]; Label->Left=(float)Form1->ClientWidth/KonLabel[id][2]; }//... }catch(...){ // } } //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender) { SetKonsSize(0,Label1->Font->Size,Label1->Top,Label1->Left); SetKonsSize(1,Label2->Font->Size,Label2->Top,Label2->Left); SetKonsSize(2,Edit1->Font->Size,Edit1->Top,Edit1->Left); //... } //--------------------------------------------------------------------------- void __fastcall TForm1::FormResize(TObject *Sender) { SetSize(Label1,0); SetSize(Label2,1); SetSize(Edit1,2); //... } //---------------------------------------------------------------------------
-
Danke !!!
Kann es sein, ads die RezieFunktion schon beim öffnem des Formulars ausgeführt wird ?
Ich habe mal ein bischen an den Zahlen rumgespielt und bemergt, das schon beim Aufruf des Forms die Werte geändert werden, obwohl das nur in der Rezise-Anweisung drin steht.
Wenn dem so ist, wie kann ich das umgehen bzw. abstellen ?
Thx@all
-
Natürlich. Schließlich wird beim Start das Fenster auf die vordefinierte Größe (welche du beim C++ Builder eingestellt hast) angepasst, damit man es überhaupt sieht.
-
Alles klar.
Hast du noch eine Idee wegen der unterschiedliche Auflösung ?
Ich hätte gedacht wenn das Fenster beispielsweise um 10Pix breiter wird muss ich die LEFT Position um 5pix erhöhen ???
Funktioniert nicht richtig.Thx@all
Danke, ich hab es über die Width-Option gemacht und Align=Center.
-
PROBLEM !!!
Bis hierher ging alles prima, wenn ich jetzt jedoch mehr wie 7 Label einfüge bekomme ich immer eine Fehlermeldung:
SetKonsSize(7,Label8->Font->Size,Label8->Top,Label8->Left,Label8->Width);
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Turnier.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0058466A in Modul 'Turnier.exe'. Schreiben von Adresse 4147F46A' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------Sobald ich diesen Eintrag lösche geht es wieder.
Das Label selbst ist noch im Form und wird auch angezeigt.HelpPlease
Thx@all
-
Hab gerade noch ein Problem festgestellt:
Wenn ich das Fenster mehrmals hintereinander maximiere/verkleinere, dann rutschen die Positionen Top->nach oben Left->nach links um so ca. 5 oder 10PIX,
d.h. nach etwa 10 mal groß/klein hat sich die anzeige um etwa 50PIX verschoben.Das Fenster hat keinen Rahmen und wird per Doppelclick maximiert/minimiert.
Thx@all
-
Zu den Speicherfehler:
Hast du dieconst CouFeld=3;
auf die Anzahl deiner Felder erhöht?
Also bei 9 Labels und 5 Edits muss die Zahl auf mindestens 14 stehen.Zu den Verschieben:
Komisch es Funktioniert auch wenn ich es 100 mal maximiere und normalisiere, die Labels und Edits verschieben sich nicht, sondern kommen immer auf den vorgesehen platz.Vielleicht könntest du deinen Code mal zeigen um den Fehler nachvollziehen zu können.
-
Danke, ja das wars
const CouFeld=3;
,
Hab ich erhöt und jetzt funzt es.
Jetzt scheint auch das mit der Verschiebung weg zu sein.THX!!!