Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 20:23 #2433

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
... és ez esetben a méret is számít (left, top, width, height), különben a nulla méretű komponensből semmi sem fog látszani. Ha pedig van mérete, de túl kicsi akkor értelemszerűen csak egy része fog látszani a rajznak.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: Mck

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 20:17 #2432

  • Mck
  • Mck profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 26
  • Köszönetek: 0
Amennyire látom hirtelen, az érdemi (és tényleg érdemi) eltérések:

a) a Paint-ba foglalás,
b) az inherited Paint, és
c) a Parent megadása.

Bármelyik hiánya okozhat zűröket ... innen nézve csoda, hogy lefutott :)

Rápróbálok; köszönöm, hogy vetted a fáradságot még az átírásra is!

((Ja, az talán lejön, hogy a tudásom a komponenskészítéstől messze van ... :)))

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 19:56 #2431

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Egyébként simán lehetne komponenst csinálni belőle kicsit több odafigyeléssel, persze attól függ, mi célja van ennek....
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2
Megköszönték: Mck

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 19:50 #2430

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Hát nekem így átírva működik!
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs;
 
type
 
  { OwnGraph }
 
  OwnGraph = class (TGraphicControl)
  protected
    procedure Paint; override;
  public
    Constructor Create(AOwner: TComponent); override;
 
  end;
 
  { TForm1 }
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
 
  public
    Own3: OwnGraph;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
constructor OwnGraph.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;
 
 
procedure OwnGraph.Paint;
begin
  inherited Paint;
  with Canvas do begin
    Pen.Width := 3;
    Line   (20, 20, 120, 20);
    LineTo (70, 100);
    LineTo (20, 20);
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Own3 := OwnGraph.Create (Self);
  with Own3 do
  begin
    Top:= 10;
    Left:= 10;
    Width:=120;
    Height:=120;
    Hint := 'OWn3Hint';
    ShowHint := true;
    Parent:= self;
  end
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Own3.Free;
end;
 
end.
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2
Megköszönték: Mck

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 17:59 #2429

  • Mck
  • Mck profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 26
  • Köszönetek: 0
Egy végletekig leegyszerűsített változat; a TPanel-t is kihagytam.

A feltett változat vége felé az OwnGraph.DrawMe eljárásban a saját Canvas hívása (tehát a kapcsos zárójelek meghagyása) esetén futásidőben (SIGSEGV) hibaüzenetet küld, a wincontrol.inc fájlban a TWinControl.HandleAllocated hívásakor (a lekérdezett FHandle memóriacíme abszurd); ezt bónuszként sajnos szintén nem értem. Ha kiveszem a kapcsos zárójeleket, akkor fut, rajzol (nyilván a Form Canvas-ára), viszont (így talán indokoltan) a Form Hint-jét (nem az OwnGraph-ét) teszi ki a kirajzolt ábra fölé is.

Most a kérdésem úgy módosulna, hogy
a) összefügghet-e a Hint nem-saját tartalma azzal, hogy nem a saját Canvas-ra rajzol;
b) mi a baj a saját Canvassal, ami a hibaüzenetet okozza?
type
 
  OwnGraph = class (TGraphicControl)
    Constructor Create (AOwner: TComponent); override;
    Procedure DrawMe;
  public
    OwnerForm: TForm;
  end;
 
  { THForm }
 
  THForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
 
  public
    Own3: OwnGraph;
 
  end;
 
var
  HForm: THForm;
 
implementation
 
{$R *.lfm}
 
{ THForm }
 
procedure THForm.FormPaint(Sender: TObject);
begin
  Own3.DrawMe;
end;
 
procedure THForm.FormCreate(Sender: TObject);
begin
  Own3 := OwnGraph.Create (Self);
 
  Hint := 'FormHint';
  ShowHint := true;
end;
 
procedure THForm.FormDestroy(Sender: TObject);
begin
  Own3.Free;
end;
 
Constructor OwnGraph.Create (AOwner: TComponent);
begin
  inherited Create (AOwner);
 
  OwnerForm := TForm (AOwner);
 
  Hint := 'OwnGraphHint';
  ParentShowHint := true;
  {ShowHint := true;  // egyremegy }
end;
 
Procedure OwnGraph.DrawMe;
begin
  with {OwnerForm.}Canvas do begin
    Pen.Width := 3;
    Line   (20, 20, 120, 20);
    LineTo (70, 100);
    LineTo (20, 20);
  end;
end;

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 16:13 #2428

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Ja, de ha TGraphiControl-ból származik, akkor jónak kéne lennie...
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 16:10 #2427

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Arra lennék kíváncsi, hogy kik (unit/class) azok a "TGraphicControl-utódok (konkrétabban kis Line+Ellipse vonalrajzok)".
Főleg a "Line" érdekelne, mert a TShape síkidomokat rajzol (előre definiált egyszerű vonal "shape" lehetőség nincs benne).
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 15:31 #2426

  • progmokus
  • progmokus profilkép
  • Haladó forumozó
  • Haladó forumozó
  • "Amit egyszer leírok..., azt lehet később átírom"
  • Hozzászólások: 79
  • Köszönetek: 16
Az TGrapicControl utódoknál kapcsold ki a ParentShowHint-et, ShowHint bekapcs, Hint mező kitölt, így jónak kellene lennie...
Windows 10, VirtualBox(Ubuntu Mate 21.04)
Lazarus 2.2.6
CodeTyphon 8.2

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 21 14:56 #2425

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Egy rövid kódot légy szíves mellékelni, ami bemutatja a problémát....
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

ShowHint ON, Hint mégsem jelenik meg 2021 jan. 20 21:56 #2424

  • Mck
  • Mck profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 26
  • Köszönetek: 0
Üdvözlet a tudoroknak :)

Van egy fejlesztési időben összeállított TFormom, rajta egy TPanel, a TPanelen pedig futásidőben előállított TGraphicControl-utódok (konkrétabban kis Line+Ellipse vonalrajzok). A ShowHint property mindegyik szinten true (a ParentShowHint is, de az gondolom így mindegy), a Hint szövege mindegyik szinten saját szöveggel kitöltve, a súgócetli azonban csak a TForm és a TPanel kilátszó részei fölött jelenik meg, a TGraphicControl-utódok fölött nem (pontosabban: ezek fölött is a TPanel Hint-szövege marad). Mit kellene tennem, hogy a saját Hint megjelenjen?

Nem vagyok profi, szóval lehet, hogy elemi a megfejtés, de annál inább érdekelne.

Köszönöm :)

  • Oldal:
  • 1