Gelöst: Problem mit Komponente aus Industrial Stuff

Rund um die LCL und andere Komponenten

Gelöst: Problem mit Komponente aus Industrial Stuff

Beitragvon Linkat » 2. Sep 2019, 16:15 Gelöst: Problem mit Komponente aus Industrial Stuff

Ich erzeuge die LED-Komponente aus Industrial Stuff, sie ist zwar vorhanden, aber nicht sichtbar.

In dem Beispielprogramm erzeuge ich zwei Komponenten aus Indutrial Stuff und einen Button. Während LEDNumber und Button da sind, wo sie sein sollen, ist die LED (TAdvLed) nicht sichtbar.

Code: Alles auswählen
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons,
  StdCtrls, AdvLed, LedNumber;
 


Code: Alles auswählen
var led     :TAdvLed;
    b       :TButton;
    ledn    :TLEDNumber;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   ledn:=TLEDNumber.Create(Self);
   ledn.Parent:=Form1;
   ledn.Top:=50;
   led:=TAdvLed.Create(Self);
   led.Parent:=Form1;
   led.Top:=100;
   led.Tag:=123;
   b:=TButton.Create(Self);
   b.Parent:=Form1;
   b.Top:=150;
   b.Caption:=IntToStr(led.Tag);
end;
 


Die nicht sichtbare LED sollte zwischen dem LED-Label und dem Button sein.

Aber ich kann den Tag=123 im Button zeigen. Das heißt, die Komponente ist zwar da, aber nicht sichtbar.

Hat jemand eine Idee?

Das Projekt habe ich anghängt.
Dateianhänge
Test.zip
(326.45 KiB) 2-mal heruntergeladen
FehlendeLED.png
FehlendeLED.png (6.14 KiB) 48-mal betrachtet
Zuletzt geändert von Linkat am 2. Sep 2019, 19:03, insgesamt 1-mal geändert.
Linkat
Lazarusforum e. V.
 
Beiträge: 415
Registriert: 10. Sep 2006, 23:24
Wohnort: nr Stuttgart
OS, Lazarus, FPC: Linux Mint 19 64 bit; Lazarus 2.0.2 FPC 3.0.4; Raspbian | 
CPU-Target: AMD 64Bit, ARM 32Bit
Nach oben

Beitragvon Socke » 2. Sep 2019, 16:24 Re: Problem mit Komponente aus Industrial Stuff

Mir fällt nur auf, dass du immer nur Top setzt, die anderen Dimensionen (Left, Width, Height) aber außer Acht lässt.
Ändert sich etwas, wenn du diese Eigenschaften ebenfalls setzts?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2627
Registriert: 22. Jul 2008, 19:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Linkat » 2. Sep 2019, 16:27 Re: Problem mit Komponente aus Industrial Stuff

Dies ist nur ein abgespecktes Test-Programm. In meinem Hauptprogramm habe ich natürlich schon viel rumprobiert (left, top, align etc.).
Linkat
Lazarusforum e. V.
 
Beiträge: 415
Registriert: 10. Sep 2006, 23:24
Wohnort: nr Stuttgart
OS, Lazarus, FPC: Linux Mint 19 64 bit; Lazarus 2.0.2 FPC 3.0.4; Raspbian | 
CPU-Target: AMD 64Bit, ARM 32Bit
Nach oben

Beitragvon Socke » 2. Sep 2019, 16:50 Re: Problem mit Komponente aus Industrial Stuff

Ich habe gerade keine installierten Industrial Komponenten da um das zu testen; daher hatte ich erst einmal geraten. :roll:
Weiter fällt mir nur noch die Visible-Eigenschaft ein. Welchen Wert hat die?

Du kannst auch einen TTIPropertyGrid (Reiter RTTI) auf das Formular legen, dessen Eigenschaft TIObject zur Laufzeit mit deiner LED befüllen und dann zur Laufzeit alle Eigenschaften anzeigen und bearbeiten.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
Lazarusforum e. V.
 
Beiträge: 2627
Registriert: 22. Jul 2008, 19:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon wp_xyz » 2. Sep 2019, 16:58 Re: Problem mit Komponente aus Industrial Stuff

Ich kann den Fehler bestätigen. Aber wenn die LED zur Designzeit aufs Formular geklickt wird, funktioniert alles.

Mit fällt auf, dass die Methode BitmapNeeded, die die Standard-Bilder aus der Resource liest, in Constructor nur im design-Mode aufgerufen wird. Dann gibt es noch die Loaded-Methode, die die "if necessary" liest. Problem ist, dass Loaded bei zur Laufzeit erzeugten Komponenten gar nicht aufgerufen wird...

Ich denke, es reicht, das "if csDesigning in ComponentState" im Constructor auszukommentieren. Und die Loaded-Methode würde ich neu schreiben, denn hier im Designmode gar nicht die geerbte Methode aufzurufen erscheint mir falsch. Also:

Code: Alles auswählen
// create control
constructor TAdvLed.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle - [csSetCaption];
  AutoSize:=True;
  FGlyphs[lsOn] := TLedBitmap.Create;
  FGlyphs[lsOff] := TLedBitmap.Create;
  FGlyphs[lsDisabled] := TLedBitmap.Create;
  FGlyphs[lsOn].OnChange:= @GlyphChanged;
  FGlyphs[lsOff].OnChange:= @GlyphChanged;
  FGlyphs[lsDisabled].OnChange:= @GlyphChanged;
  FBlinkTimer := TTimer.Create(nil);
  FBlinkTimer.OnTimer := @DoTimer;
  FBlinkTimer.Enabled := false;
  //if (csDesigning in ComponentState) then
  BitmapNeeded;
end;
 
// loaded
procedure TAdvLed.Loaded;
begin
  inherited;
  if FKind <> lkCustom then
    BitmapNeeded;
end;

Die Art, wie die benutzerdefinierten Bitmaps verwendet werden, ist gewöhnungsbedürftig. Man muss zuerst Kind auf lkCustom setzen und dann die entsprechenden Bitmaps in GlyphDisabled, GlyphOff und GlyphOn einladen. Danach darf man Kind nicht mehr verändern, sonst gehen die Custom-Bitmaps verloren.

Bitte testen. Wenn es damit keine Probleme gibt, lade ich die Änderung ins offizielle Repo hoch.
wp_xyz
 
Beiträge: 2970
Registriert: 8. Apr 2011, 09:01

Beitragvon Linkat » 2. Sep 2019, 19:01 Re: Problem mit Komponente aus Industrial Stuff

Hallo wp_xyz,
vielen Dank für die schnelle Hilfe.
Es funktioniert.

Kaum zu glauben, dass du den Quelltext durchblickst.
Du musst eine Menge Wissen und Erfahrung haben. Alle Achtung!!

Viel Erfolg bei der Beseitigung weiterer Fehler.

Gruß, Linkat
Dateianhänge
ohneFehler.png
ohneFehler.png (10.09 KiB) 33-mal betrachtet
Linkat
Lazarusforum e. V.
 
Beiträge: 415
Registriert: 10. Sep 2006, 23:24
Wohnort: nr Stuttgart
OS, Lazarus, FPC: Linux Mint 19 64 bit; Lazarus 2.0.2 FPC 3.0.4; Raspbian | 
CPU-Target: AMD 64Bit, ARM 32Bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste

porpoises-institution
accuracy-worried