ExtCreatePen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

ExtCreatePen

Beitrag von wennerer »

Hallo zusammen,
ich versuche einen eigenen Pen für den Canvas zu erzeugen. Mit der Funktion ExtCreatePen ist mir das auch soweit geglückt. Beim Kompilieren kommt aber folgende Meldung:
unit1.pas(114,13) Warning: Symbol "Handle" is deprecated

Kann ich ExtCreatePen auch so verwenden das es nicht veraltet ist? Bzw. welche Funktion muss ich sonst verwenden?
Und noch eine Frage wie kann ich von einem Geometric Pen wieder zum normalen Cosmetic Pen zurück wechseln?
Viele Grüße
Bernd

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ExtCreatePen

Beitrag von Euklid »

Hallo Bernd,

ich habe auch mal ein wenig gesucht. Manchmal steht in der Dokumentation der lcl der nicht veraltete Ersatz.

Zu ExtCreatePen habe ich nichts finden können. Ich kann mir vorstellen, dass es im englischsprachigen Forum Entwickler gibt, die so weit involviert sind, dass sie weiterhelfen können...

Beste Grüße, Euklid

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ExtCreatePen

Beitrag von Winni »

Hi!

Debatte über das Thema im internationalen Forum:

https://forum.lazarus.freepascal.org/in ... #msg217031

Winni

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: ExtCreatePen

Beitrag von wennerer »

Hallo,
danke für die Antworten. Ich hab aber wohl mein Anliegen schlecht beschrieben. ExtCreatePen macht schon was es soll, nur ist die Zuweisung Canvas.Pen.Handle deprecated. Soweit ich mich nun eingelesen habe ersetzt man pen.handle mit canvas.Pen.Reference. Das geht aber wohl nur zum Lesen? Eine Ausgabe habe ich jedenfalls nicht hinbekommen. Soll ich oder muss ich die Warnung also ignorieren???

Viele Grüße
Bernd
property Handle: HPEN; [rw] deprecated ; The Operating System Handle for the current Pen
property Reference: TWSPenReference; [r] A Reference made to this Pen
aus der unit WSReferences:

Code: Alles auswählen

  // All properties with _ are temporary and for lcl use only.
  // They can be removed anytime, without notice
  //
  // (don't complain that I didn't warn you) 
  
  TWSPenReference = object(TWSGDIObjReference)
    property _lclHandle: TLCLHandle write FRef.Handle;
    property Handle: TLCLHandle read FRef.Handle;
  end;    

Mein Quelltext:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
  LCLType, LCLIntf;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormPaint(Sender: TObject);
begin
 canvas.Line(0,50,Width,50);
end;

procedure TForm1.Button1Click(Sender: TObject);
const
 //Dashes: array[0..3] of DWord = (10, 10, 10, 10); // gestrichelt
 //Dashes: array[0..3] of DWord = (10, 10, 3, 10); // strichpunkt
 Dashes   : array[0..5] of DWord = (10,5,3,5,3,5); // strichpunktpunkt
 PenStyle : DWord = PS_GEOMETRIC or PS_USERSTYLE or PS_ENDCAP_FLAT;

var
 lb: TLogBrush;
 PenWidth : DWord;
 NewPen   : HPen;
begin
 lb.lbColor := ColorToRGB(clblue);
 lb.lbHatch := 0;
 lb.lbStyle := BS_SOLID;
 PenWidth :=   Canvas.Pen.Width;
 NewPen := ExtCreatePen(PenStyle, PenWidth, lb, Length(Dashes), @Dashes);
 canvas.Pen.Handle:=NewPen;
 Invalidate;
end;

end.

Hier die Meldung:
Bildschirmfoto.png
Bildschirmfoto.png (22.46 KiB) 3675 mal betrachtet

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ExtCreatePen

Beitrag von Winni »

Hi!

Mach Dir nicht allzu viel Sorgen wegen "deprecated":

Erfahrungsgemäß bleibt das noch 2-3 Versionen in diesem Zustand.
Wenn nicht länger. Um das zu beseitigen muss gearbeitet werden !

Winni

PS . Anderes Thema, aber ähnliche Situation:
Im Linux-Kernel wollten sie die Floppies rauswerfen, weil sie keinen Maintainer hatten.
Nun haben sie doch noch einen mit ner Floppy gefunden ......

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

Re: ExtCreatePen

Beitrag von Mathias »

Im Linux-Kernel wollten sie die Floppies rauswerfen, weil sie keinen Maintainer hatten.
Nun haben sie doch noch einen mit ner Floppy gefunden ......
Muss Linux Win10 nachmachen ? :roll:

Zwischendurch ist man doch noch froh, kann man Disketten einlesen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ExtCreatePen

Beitrag von Winni »

Mathias hat geschrieben:
Sa 25. Jul 2020, 22:46

Muss Linux Win10 nachmachen ? :roll:

Zwischendurch ist man doch noch froh, kann man Disketten einlesen.
Ist zwar völlig off topic aber:

Sie hatten einfach keinen Maintainer mehr. Der letzte konnte/wollte nicht mehr.
Und dann waren ein paar Freiwillige da, aber ohne Floppy.
Und ich glaub, mein letzter Floppy-Controller hat auch n Schuß.

Also höchste Zeit, alles auf die Platte zu bringen:

dd if=/dev/fd0 of=/data/fd/Floppy222.image

Winni

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: ExtCreatePen

Beitrag von wennerer »

Hallo Winni,
sollte es wirklich keine Möglichkeit geben die nicht "deprecated" ist? Mir leuchtet nicht so wirklich ein warum etwas auf "deprecated" gesetzt werden sollte solange nichts neues dafür da ist? Mangels besserer Alternativen werde ich es aber jetzt doch verwenden (es geht ja alles).
Vielen Dank für deine Einschätzung!
Bernd
Zuletzt geändert von wennerer am So 26. Jul 2020, 14:52, insgesamt 1-mal geändert.

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

Re: ExtCreatePen

Beitrag von Mathias »

Winni hat geschrieben:
Sa 25. Jul 2020, 23:15
Mathias hat geschrieben:
Sa 25. Jul 2020, 22:46

Muss Linux Win10 nachmachen ? :roll:

Zwischendurch ist man doch noch froh, kann man Disketten einlesen.
Ist zwar völlig off topic aber:

Sie hatten einfach keinen Maintainer mehr. Der letzte konnte/wollte nicht mehr.
Und dann waren ein paar Freiwillige da, aber ohne Floppy.
Und ich glaub, mein letzter Floppy-Controller hat auch n Schuß.

Also höchste Zeit, alles auf die Platte zu bringen:

dd if=/dev/fd0 of=/data/fd/Floppy222.image

Winni
Betrifft das nur die Floppy Kontroller, oder sind da auch die USB Laufwerke betroffen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: ExtCreatePen

Beitrag von wennerer »

Hallo an Alle,
ich probiere immer noch mit extcreatepen herum und hätte da zwei Fragen zum Verhalten unter Linux Mint.
Wenn ich als Penstyle PS_INSIDEFRAME wähle zeichnet er unter Windows (zumindest in XP) wie erwartet ein Rechteck innerhalb der Koordinaten. Unter Linux ist das Ergebnis wie bei PS_Solid.
Und wenn ich beim LogBrush als Style BS_HATCHED einsetze funktioiert es in XP, unter Linux wird es ignoriert.
Weiß Jemand von den Linux Spezialisten ob das einfach nicht geht oder ob ich es nur anders anfangen muss?

So sieht es in XP aus ( PS_INSIDEFRAME, BS_HATCHED, HS_DIAGCROSS)
Bildschirmfoto1.png
Bildschirmfoto1.png (3.85 KiB) 3448 mal betrachtet
In Mint ist die Linie solid und der rote Strich ist in der Mitte.

Viele Grüße
Bernd

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: ExtCreatePen

Beitrag von Winni »

Hallo!

Du wirst noch mehr Widrigkeiten bei der Beschäftigung mit dem Canvas erleben.

Wenn Du wirklich richtig etwas mit Grafik machen willst, nimm eine richtige Grafik-Bibliothek wie BGRAbitmap - gibt's im Online-Package-Manager.

Der Canvas taugt, um Icons auf Buttons zu malen oder Schrift in ListBoxen. Aber es gibt einige Tücken und um wirkliche Grafiken zu zaubern, fangen die Fallstricke früh an - wie Du gerade merkst.

Winni

wennerer
Beiträge: 507
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: ExtCreatePen

Beitrag von wennerer »

Okay, danke für den Tipp.
Im Wiki ist ein Tutorial mit 16 Kapiteln. Die werd ich dann mal so nach und nach durchmachen.
Viele Grüße
Bernd

Antworten