Komponentengröße

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Komponentengröße

Beitrag von theo »

Mathias hat geschrieben:
Bei mir geht's unter Linux GTK2 64 mit zwei Änderungen.

Welche Unit ?
In der Easysize.pas, steht bei mir an den beiden Zeilen ganz etwas anderes.


Da ich leider nicht genau wusste was bei dir dort steht, beziehen sich meine Angaben auf die originale Datei vom easysize.zip. :roll:

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Komponentengröße

Beitrag von Mathias »

Da ich leider nicht genau wusste was bei dir dort steht, beziehen sich meine Angaben auf die originale Datei vom easysize.zip. :roll:

Ich habe nicht mehr daran gedacht, das ich in der Datei ein paar Zeilen entfernt hatte. :oops:

Jetzt gehts, danke. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Komponentengröße

Beitrag von Frank Ranis »

Hallo,

@Andromeda , 10. Okt 2016, 08:54
Auf deinem Bild3.jpg taucht der Fehler ja in der unit1.pas auf .
Das ist , denke ich mal die Haupt-Unit mit den Demo-Komponenten drauf.
Geschickt wäre , wenn Du den kompletten Code der Unit1 hier mal einstellst , ansonsten kann dir wohl keiner helfen.

@wp_xyz , 27. Sep 2016, 10:10
>>>>
Leider schreibt der Autor im readme.txt:

This file may be redistributed freely if not altered
<<<<

Ja das ist doof.
Wenn also jemand Lust auf Änderungen (bez. Linux) hätte , und an eine Veröffentlichung denkt , dann müßte man erst mal mit dem Autor Kontakt aufnehmen und um Freigebe bitten.

Aber für sich privat , kann man solche Versuche doch anstellen , oder ist das auch verboten?

@theo , 10. Okt 2016, 10:13
>>>>
Bei mir geht's unter Linux GTK2 64 mit zwei Änderungen.
Zeile 125 (in SetCompFont) : SetOrdProp(Component, ptrPropInfo, PtrInt(aFont));
Zeile 249: if FCompFont.Size=0 then InitFontSize := 10 else InitFontSize:=FCompFont.Size;
Den Rest des Codes könnte man vllt. auch noch anschauen auf Pointer Casting, aber so läuft es erstmal.
<<<<

Kann das leider , wegen LINUX-Mangel nicht probieren , aber wenn es mit so einfachen Änderungen läuft , prima.

Frage :
Hast Du dann den Schalter {$MODE DELPHI} wieder weggelassen und nutzt {$mode objfpc}{$H+} ?

Gruß

Frank
www.flz-vortex.de

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Komponentengröße

Beitrag von wp_xyz »

Frank Ranis hat geschrieben:@wp_xyz , 27. Sep 2016, 10:10
>>>>
Leider schreibt der Autor im readme.txt:

This file may be redistributed freely if not altered
<<<<

Ja das ist doof.
Wenn also jemand Lust auf Änderungen (bez. Linux) hätte , und an eine Veröffentlichung denkt , dann müßte man erst mal mit dem Autor Kontakt aufnehmen und um Freigebe bitten.

Aber für sich privat , kann man solche Versuche doch anstellen , oder ist das auch verboten?

Da verteilst du ja nichts weiter.

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Komponentengröße

Beitrag von MacWomble »

Frank Ranis hat geschrieben:Wenn also jemand Lust auf Änderungen (bez. Linux) hätte , und an eine Veröffentlichung denkt , dann müßte man erst mal mit dem Autor Kontakt aufnehmen und um Freigebe bitten.


Und wo liegt da das Problem?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Komponentengröße

Beitrag von theo »

Frank Ranis hat geschrieben:Frage :
Hast Du dann den Schalter {$MODE DELPHI} wieder weggelassen und nutzt {$mode objfpc}{$H+} ?

Das spielt bei mir keine Rolle. Bei dir schon?

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Komponentengröße

Beitrag von Frank Ranis »

Hallo ,

@MacWomble ,13. Okt 2016, 09:59
>>>>
Und wo liegt da das Problem?
<<<<

Kein Problem.
Mit dem Wolfgang Kleinrath habe ich Kontakt aufgenommen , er kann leider nicht mehr helfen (neues Hobby).
Und beim David Price muß ich noch versuchen.

@theo , 13. Okt 2016, 13:34
>>>>
Frank Ranis hat geschrieben:
Frage :
Hast Du dann den Schalter {$MODE DELPHI} wieder weggelassen und nutzt {$mode objfpc}{$H+} ?

Das spielt bei mir keine Rolle. Bei dir schon?
<<<<

Doch ja , unter Windows bekommen ich im FPC_Mode folgende Fehlermeldung bei Compilieren.

Error: illegal type conversation: "Int64" to "TFont"

in der Easysize-Routine

Code: Alles auswählen

function GetCompFont(Component : TComponent) : TFont;
var ptrPropInfo : PPropInfo;
begin
  ptrPropInfo := GetPropInfo(Component.ClassInfo, 'Font');
  if ptrPropInfo = nil then
     Result := nil
  else
      Result := TFont(GetOrdProp(Component, ptrPropInfo));    // <------------- Hier knallt es
end


Benutze ich den Delphi-Mode , klappt alles super , und auch deine Änderungen habe ich probiert .

Code: Alles auswählen

Zeile 125 (in SetCompFont) : SetOrdProp(Component, ptrPropInfo, PtrInt(aFont));
Zeile 249: if FCompFont.Size=0 then InitFontSize := 10 else InitFontSize:=FCompFont.Size;


Das funktioniert im Delphi-Mode auch .

Aber im FPC_Mode ist irgend etwas gewaltig anders , betreffend der Klasse TFONT.

Ich habe leider auch noch nicht verstanden , was Lazarus so treibt , wenn man den {$MODE DELPHI} anstelle von {$mode objfpc}{$H+} nutzt.

Gruß

Frank
www.flz-vortex.de

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Komponentengröße

Beitrag von theo »

Welche Compiler Version?
Mein FPC 3.1.1 x86_64-linux sagt nichts.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Komponentengröße

Beitrag von wp_xyz »

So geht's bei mir auch ohne DELPHI-Mode (Laz trunk, Laz 1.6 (fpc 3.0), Laz 1.4.4/fpc 2.6.4):

Code: Alles auswählen

function GetCompFont(Component : TComponent) : TFont;
var ptrPropInfo : PPropInfo;
   p: Int64;
begin
  ptrPropInfo := GetPropInfo(Component.ClassInfo, 'Font');
  if ptrPropInfo = nil then
     Result := nil
  else
    Result := TFont(IntPtr(GetOrdProp(Component, ptrPropInfo)));
end;

Wichtig ist auch die zweite Bemerkung von theo, dass die Font-Größen, die bei Lazarus standardmäßig 0 sind, auf einen realen Wert gesetzt werden. Denn: null mal irgendwas ist immer wieder null.

In der uses-Zeile müssen auch alle Windows-Units entfernt werden - sie werden eh nicht benötigt. Dann läuft's auch unter Linux.

Code: Alles auswählen

unit Easysize;
 
interface
 
uses
  //WinTypes, WinProcs, Messages,
  SysUtils, Classes, Controls,
  Forms, Graphics, StdCtrls;
 
{$R Easysize.res}
 
(*
{$IFDEF WIN32}
{$R Easysize.d32}
{$ELSE}
{$R Easysize.d16}
{$ENDIF}
  *)


Falls sich jemdand EasySize als Komponente installieren möchte, habe ich ein Package beigefügt, zusammen mit dem Paletten-Icon, das ich aus der d32-Datei extrahiert habe ("großspurig" ausgedrückt... es IST die d32-Datei, nur nach .res umbenannt). Wegen der unklaren Situation zur Weiterverbreitung des Sourcecodes enthält die zip-Datei nicht die zugehörige EasySize.pas. Wer sich also das als Komponente in die IDE installieren möchte, muss folgendes tun:

  • Beigefügte zip-Datei in ein Verzeichnis extrahieren.
  • Datei EasySize.pas aus dem Original-Archiv (siehe torry.net-Link weiter oben) dazu kopieren und folgendermaßen editieren
    • wie oben beschrieben, Windows-Units aus der Uses-Zeile entfernen (WinTypes, WinProcs, Messages, aber auch Forms wird nicht genötigt).
    • nach der uses-Zeile mit "{$R Easysize.res}" das Paletten-Icon einbinden (also wie die Original $R-Zeile, nur mit .res statt .d32 als Endung) - siehe oben im Code.
    • wie oben beschrieben, IntPtr-Cast in der Result-Zeile von GetCompFont einfügen (oder {$MODE DELPHI} an den Anfang der Datei schreiben).
    • wie oben von Theo beschrieben, Font-Größe 0 vermeiden. Dazu etwa nach Zeile 250, zwischen "FCompFont := GetCompFont(FComponent)" und "InitFontSize := FCompFon.Size" dieses einfügen: "if FCompFont.Size = 0 then FCompFont.Height := GetFontData(FCompFont.Handle).Height;" (das stellt die "richtige" Default-Font-Größe zur Verfügung).
  • Package installieren (Menü "Package" / "Package-Datei (.lpk) öffnen", zur Datei laz_Easysize.lpk navigieren, laden, "Nutzung" / "Installieren", mit "Ja" bestätigen. warten... Nach einige Zeit startet Lazarus neu und man findet die neue Komponente in der Palette "Additional".
Dateianhänge
EasySize_package.zip
(770 Bytes) 90-mal heruntergeladen

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Komponentengröße

Beitrag von Frank Ranis »

Hallo ,

@wp_xyz » 14. Okt 2016

Deine letzten Änderungen funktionieren wirklich gut .
Und es sind ja wirklich nur Kleinigkeiten zu ändern , ich hätte mir das komplizierter vorgestellt.
Ich komme jetzt ohne den Schalter {$MODE DELPHI} aus und somit dürfte dann der TFormResizer Plattform-unabhängig nutzbar sein.


Ich habe versucht mit dem Orginal-Autor (David A. Price, dprice@erols.com) Kontakt aufzunehmen.
Leider ist die Mail-Adresse nicht mehr gültig.
So müssen wir mit dem Vorlieb nehmen , was hier gesagt wurde.
Es sei denn , irgend jemand hat eine gültige Mail-Adresse , dann versuche ich es gerne noch einmal.

Gruß

Frank
www.flz-vortex.de

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Komponentengröße

Beitrag von theo »

wp_xyz hat geschrieben:[*]wie oben von Theo beschrieben, Font-Größe 0 vermeiden. Dazu etwa nach Zeile 250, zwischen "FCompFont := GetCompFont(FComponent)" und "InitFontSize := FCompFon.Size" dieses einfügen: "if FCompFont.Size = 0 then FCompFont.Height := GetFontData(FCompFont.Handle).Height;" (das stellt die "richtige" Default-Font-Größe zur Verfügung).[/list]

GetFontData ist gut, aber hast du das durchkontrolliert?
Wäre es vom Codeaufbau her nicht eher:

Code: Alles auswählen

 
if FCompFont.Size=0 then InitFontSize := round(GetFontData(FCompFont.Handle).Height * 72 / FCompFont.PixelsPerInch) else InitFontSize:=FCompFont.Size;
 


Weil dort sind wir ja im Konstruktor und sollten einen Wert für "InitFontSize" setzen? (Habe aber den Rest des Codes nicht analysiert).

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Komponentengröße

Beitrag von wp_xyz »

theo hat geschrieben:Wäre es vom Codeaufbau her nicht eher:...

Natürlich, da hast du Recht.

Antworten