TNotebook macht Schwierigkeiten
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
TNotebook macht Schwierigkeiten
Hallo liebes Forum,
ich habe da mal eine Frage dem TNotebook betreffend.
Meine Hauptform ist auf einem TNotebook aufgebaut und habe auch um die 80 Seiten (möchte also nicht mehr umbauen auf z.B. TPageControl). Und man kann bekanntlich ja nur über den OI die Farbe des Hintergrundes vom TNotebook ändern. Ich möchte aber lieber ein Hintergrundbild bei jeder Page sehen. Momentan hab ich auf jeder Page (80x) das selbe Bild als TImage laden müssen (habe dann halt die Z-Reihenfolge geändert, sodass es wie ein Background Image ausschaut) und das frisst aber Speicher. Da mein Prog auf eine CD kommen soll, ist diese jetzige Lösung nicht hilfreich.
Wie ist es dann umzusetzen, dass die Pages des TNotebooks entweder alle das selbe Hintergrundbild verpasst bekommen, es aber nur einmal "geladen" wird oder das die Farbe o.ä. des TNotebooks transparent gemacht wird und ein TImage im TForm zu finden ist (also der TForm1 untergeordnet - im OI gesehen)
Wisst ihr so ziemlich, was ich gemeint habe? Ich würde mich auf eine hilfreiche Antwort sehr freuen
Gruß
Boneless
EDIT: Nach dem Suchen frag ich, ob man einer Color (Beispiel clNavy) dann einen transparenten Wert geben muss?
ich habe da mal eine Frage dem TNotebook betreffend.
Meine Hauptform ist auf einem TNotebook aufgebaut und habe auch um die 80 Seiten (möchte also nicht mehr umbauen auf z.B. TPageControl). Und man kann bekanntlich ja nur über den OI die Farbe des Hintergrundes vom TNotebook ändern. Ich möchte aber lieber ein Hintergrundbild bei jeder Page sehen. Momentan hab ich auf jeder Page (80x) das selbe Bild als TImage laden müssen (habe dann halt die Z-Reihenfolge geändert, sodass es wie ein Background Image ausschaut) und das frisst aber Speicher. Da mein Prog auf eine CD kommen soll, ist diese jetzige Lösung nicht hilfreich.
Wie ist es dann umzusetzen, dass die Pages des TNotebooks entweder alle das selbe Hintergrundbild verpasst bekommen, es aber nur einmal "geladen" wird oder das die Farbe o.ä. des TNotebooks transparent gemacht wird und ein TImage im TForm zu finden ist (also der TForm1 untergeordnet - im OI gesehen)
Wisst ihr so ziemlich, was ich gemeint habe? Ich würde mich auf eine hilfreiche Antwort sehr freuen
Gruß
Boneless
EDIT: Nach dem Suchen frag ich, ob man einer Color (Beispiel clNavy) dann einen transparenten Wert geben muss?
Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: TNotebook macht Schwierigkeiten
Vielleicht hilft Euch das etwas auf die Sprünge (mich nicht so wirklich
) :
In der Unit Graphics gibt es proceduren und propertys namens
- SetTransparent
- GetTransparent und
- TransparentColor
Ich glaube schon, dass es etwas tiefgründiger ist, dies ganze hier. Aber ich als FPC Einsteiger.. das ist (noch) zu hoch für mich..

In der Unit Graphics gibt es proceduren und propertys namens
- SetTransparent
- GetTransparent und
- TransparentColor
Ich glaube schon, dass es etwas tiefgründiger ist, dies ganze hier. Aber ich als FPC Einsteiger.. das ist (noch) zu hoch für mich..

Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: TNotebook macht Schwierigkeiten
Das könntest Du so realisieren:Boneless hat geschrieben:das selbe Hintergrundbild verpasst bekommen, es aber nur einmal "geladen" wird
Code: Alles auswählen
var
Form1: TForm1;
Image: TImage;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
Image:=TImage.Create(Self);
Image.Stretch:=True;
Image.Picture.LoadFromFile('C:\01\01.jpg'); //Hier das Hintergrundbild laden
Image.Width:=NoteBook1.ClientWidth;
Image.Height:=NoteBook1.ClientHeight;
end;
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
NoteBook1.PageIndex:=NoteBook1.PageIndex + 1;
Image.Parent:=NoteBook1.Page[NoteBook1.PageIndex];
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: TNotebook macht Schwierigkeiten
Hey Michl,
danke für deinen Denkanstoß.
Deine Prozedur beim FormCreate funktioniert auch noch. Aber beim PageWechseln haperts. Ich gebe mal den Code dazu
Soweit so gut. Also das Array geht auch noch weiter bis 80. Und um die Pages zu wechseln, benutze ich auch keine Button, sondern MenuItems. Bei jedem MenuItem ist das gleiche Event zugeordnet, namens ShowPanel
Meiner Meinung nach passt PageIndex nicht da rein. Denn jede Page hat einen anderen Namen und nicht Page1, Page2, ... . Und einem PageIndex habe ich auch nicht jeder Page manuell zugeordnet. Das ist auch das, was die Anwendung zum Absturz bringt. 'Ne Idee wie das zu lösen ist?
danke für deinen Denkanstoß.
Deine Prozedur beim FormCreate funktioniert auch noch. Aber beim PageWechseln haperts. Ich gebe mal den Code dazu
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
Image:TImage;
begin
FPanelArray[0].Panel:=Page1;
FPanelArray[0].MenuItem:=MI_Page0;
FPanelArray[1].Panel:=SiebenZip;
FPanelArray[1].MenuItem:=MI_Page1;
FPanelArray[2].Panel:=Animake;
FPanelArray[2].MenuItem:=MI_Page2;
FPanelArray[3].Panel:=AutoMouse;
FPanelArray[3].MenuItem:=MI_Page3;
FPanelArray[4].Panel:=CheatEngine;
FPanelArray[4].MenuItem:=MI_Page4;
FPanelArray[5].Panel:=Craagle;
FPanelArray[5].MenuItem:=MI_Page5;
FPanelArray[6].Panel:=Cube;
FPanelArray[6].MenuItem:=MI_Page6;
FPanelArray[7].Panel:=Dll_Icon_Maker;
FPanelArray[7].MenuItem:=MI_Page7;
FPanelArray[8].Panel:=Hex_Farbmischer;
FPanelArray[8].MenuItem:=MI_Page8;
FPanelArray[9].Panel:=JavaScript_Collector;
FPanelArray[9].MenuItem:=MI_Page9;
FPanelArray[10].Panel:=Lazarus64;
FPanelArray[10].MenuItem:=MI_Page10;
for i:=0 to ANZAHL_PANELS do begin
FPanelArray[i].Panel.Visible:=False;
FPanelArray[i].Panel.Enabled:=False;
end;
Image:=TImage.Create(Self);
Image.Stretch:=True;
Image.Picture.LoadFromFile('img\bgimg.jpg'); //Hier das Hintergrundbild laden
Image.Width:=NoteBook1.ClientWidth;
Image.Height:=NoteBook1.ClientHeight;
end;
Code: Alles auswählen
procedure TForm1.ShowPanel(Sender: TObject); // OnClick Event der MenuItems
var
i: Integer;
Image: TImage;
begin
for i:=0 to ANZAHL_PANELS do
if Sender = FPanelArray[i].MenuItem then begin
FPanelArray[i].Panel.Enabled := True;
FPanelArray[i].Panel.Visible := True;
FPanelArray[i].MenuItem.Checked := True;
end else begin
FPanelArray[i].Panel.Enabled := False;
FPanelArray[i].Panel.Visible := False;
FPanelArray[i].MenuItem.Checked := False;
end;
Notebook1.PageIndex:=Notebook1.PageIndex + 1;
Image.Parent:=Notebook1.Page[Notebook1.PageIndex];
end;
Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: TNotebook macht Schwierigkeiten
evtl so?!:
Das Image müsste global oder in der Klasse TForm1 deklariert werden...
Code: Alles auswählen
procedure TForm1.ShowPanel(Sender: TObject); // OnClick Event der MenuItems
var
i: Integer;
// Image: TImage;
begin
for i:=0 to ANZAHL_PANELS do
if Sender = FPanelArray[i].MenuItem then begin
FPanelArray[i].Panel.Enabled := True;
FPanelArray[i].Panel.Visible := True;
FPanelArray[i].MenuItem.Checked := True;}
Image.Width:=FPanelArray[i].Panel.ClientWidth;
Image.Height:=FPanelArray[i].Panel.ClientHeight;
Image.Parent:=FPanelArray[i].Panel;
end else begin
FPanelArray[i].Panel.Enabled := False;
FPanelArray[i].Panel.Visible := False;
FPanelArray[i].MenuItem.Checked := False;
end;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: TNotebook macht Schwierigkeiten
(Er gibt mir dann eine Fehlermeldung in der control.inc zurück:)
EDIT:
Code: Alles auswählen
begin
{$IFDEF CHECK_POSITION}
if CheckPosition(Self) then
DebugLn('[TControl.SetWidth] ',Name,':',ClassName,' ',dbgs(Value));
{$ENDIF}
if csLoading in ComponentState then // Hier der Fehler
begin
FReadBounds.Right := FReadBounds.Left+Value;
Include(FControlFlags, cfWidthLoaded);
end;
if [csDesigning, csDestroying, csLoading] * ComponentState = [csDesigning] then
CheckDesignBounds;
SetBounds(FLeft, FTop, Max(0, Value), FHeight);
end;
Ja jetzt klappts, aber wie kann ich die Z-Reihenfolge noch ändern?Michl hat geschrieben:Das Image müsste global oder in der Klasse TForm1 deklariert werden...
Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: TNotebook macht Schwierigkeiten
Image.SendToBack; schon probiert?!
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: TNotebook macht Schwierigkeiten
Jo, läuft
Danke man
das spart echt Speicher 
Aber beim FormCreate sitz ich noch aufm Schlauch. Bei FormCreate wird eine Seite des TNotebooks schon angezeigt. Und da soll das Bild auch schon rein. Habs versucht.. funzt aber nich

Danke man


Aber beim FormCreate sitz ich noch aufm Schlauch. Bei FormCreate wird eine Seite des TNotebooks schon angezeigt. Und da soll das Bild auch schon rein. Habs versucht.. funzt aber nich
Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: TNotebook macht Schwierigkeiten
Na da musst Du einfach nach dem Createn des Images das erste angezeigte Objekt als Parent des Images zuweisen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: TNotebook macht Schwierigkeiten
Hab ich das gemacht?
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
Image:=TImage.Create(Self);
Image.Stretch:=True;
Image.Picture.LoadFromFile('img\bgimg.jpg'); //Hier das Hintergrundbild laden
Image.Width:=Page1.ClientWidth;
Image.Height:=Page1.ClientHeight;
Image.Parent:=Page1;
Image.SendToBack;
end;
Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: TNotebook macht Schwierigkeiten
Wenn Page1 angezeigt wird, wenn Du das Programm startest, sollte der Code so funktionieren.
[Edit]: Wahrscheinlich liegt über der Page1 noch ein Panel, müsstest also das Panel als Parent nehmen
[Edit]: Wahrscheinlich liegt über der Page1 noch ein Panel, müsstest also das Panel als Parent nehmen
Zuletzt geändert von Michl am So 29. Dez 2013, 21:00, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: TNotebook macht Schwierigkeiten
Funktioniert aber nicht..Michl hat geschrieben:Wenn Page1 angezeigt wird, wenn Du das Programm startest, sollte der Code so funktionieren.

Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: TNotebook macht Schwierigkeiten
Hatte eben noch Edit gemacht, was ich jetzt einmal geraten habe 

Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 52
- Registriert: So 1. Dez 2013, 14:15
- OS, Lazarus, FPC: Windows 7 (L 1.0.14 - FPC 2.6.0)
- CPU-Target: 64Bit
- Wohnort: Ostsee
Re: TNotebook macht Schwierigkeiten
Nee nee. Das ".Panel" in den Schleifen und Arrays, kommt nur zustande, weil ich mal statt TNotebook ein TPageControl hatte mit immerein FulllSize Panel drauf.. Wollte den Code bloß nicht ändern 

Code: Alles auswählen
program Boneless;
{$mode Einsteiger}{H+}
Re: TNotebook macht Schwierigkeiten
Daran kann ich mich erinnern. Das ändert aber nichts daran, dass IMHO entweder Page1 nicht beim Starten angezeigt wird oder Page1 von irgendwas übermalt wird.Boneless hat geschrieben: weil ich mal statt TNotebook ein TPageControl hatte
Setz doch mal ein Objekt (TLabel, TEdit oder so) im Formular auf Page1 und schaue, ob dieses Objekt beim Starten angezeigt wird.
Ist aber schwierg zu raten, was da schiefläuft, bei der derzeitigen Informationslage.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;