Via Button eine neue FrameForm aufrufen
-
- Beiträge: 144
- Registriert: So 22. Aug 2010, 16:06
- OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
- CPU-Target: 64bit
- Wohnort: NRW
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
frame1 : TFrame1;
in die Klassendeklaration einfügen?
in die Klassendeklaration einfügen?
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
Spätestens in diesen beiden Zeilen sollte der FPC stehen bleiben, da zumindest TFrame2 eine Klasse und Visible eine Objekt-Eigenschaft ist.Bauer321 hat geschrieben:Code: Alles auswählen
Form1.parent := frame; TFrame2.visible := true; [...] Form1.parent := frame; TFrame1.visible := true;
Andererseits solltest du alle Frames, die nicht angezeigt werden, verstecken (Visible := False). Ansonsten darfst du dich evtl. auch noch mit Z-Order herumschlagen (bzw. BringToFront aufrufen, wenn es sowas gibt).
Der andere Punkt ist, die Zeile "Form1.parent := frame;", die auch im objektorientierten Sinne nicht nur falsch ist:
- Form1 ist eine globale Variable vom Typ TForm1. Das ist in der eine bestimmte Instanz dieser Klasse (auch wenn du wahrscheinlich nur eine Instanz dieses Formulars haben wirst). Da die Klasse TForm1 aber allgemein in jeder Variablen gespeichert werden soll, solltest du Self.Parent verwenden. Self ist immer eine Variable, die auf das Objekt zeigt, welches diese Funktion aufruft und somit nur in Methoden (=Funktionen und Prozeduren einer Klasse oder eines Objektes) verfügbar.
- Die Eigenschaft "Parent" ist immer ein Control, auf dem das jeweilige Element angezeigt wird. In deinem Falle würde Form1 auf "frame" angezeigt (mit der Position aus Height und Width des Formulars). Richtig wäre frame.Parent := Self;
Bei geschätzten 20 Frames (du hast 20 Speedbuttons) wäre wohl eine Liste oder ein array of TFrame eine einfache und vor allem übersichtliche Möglichkeit die Frames zu verwalten.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
könntet ihr mit bitte den code reinstellen wie ich zum beispiel wenn ich auf SpeedButton1 klicke Frame 1 in mienem Frame angezeigt bekomme und wenn ich auf TSpeedButton2 klicke Frame 2 in meinem frame angezeigt bekomme?
www.mcpatcher.net | www.hoeper.me
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
Bei diesem Beispiel musst du jedem Button in der Eigenschaft "Tag" eine Zahl zwischen 0 und 19 eintragen. Wenn du das übernimmst, füge bitte noch die notwendigen Überprüfungen ein.Bauer321 hat geschrieben:könntet ihr mit bitte den code reinstellen wie ich zum beispiel wenn ich auf SpeedButton1 klicke Frame 1 in mienem Frame angezeigt bekomme und wenn ich auf TSpeedButton2 klicke Frame 2 in meinem frame angezeigt bekomme?
Code: Alles auswählen
fFrames: array[0..19] of TFrame;
fLastFrame: TFrame;
...
procedure TForm1.ButtonClick(Sender: TObject);
begin
fLastFrame.Hide;
fFrames[TSpeedButton(Sender).Tag].Show;
fLastFrame := fFrames[TSpeedButton(Sender).Tag];
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
also irgendwie klappt das von vorne bis hinten nicht...
Code: Alles auswählen
unit unit_sf;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ExtCtrls, ComCtrls, OpenURLUtil,
unitframe_start, unitframe_questhelper;
type
{ TForm1 }
TForm1 = class(TForm)
frame: TFrame2;
Image1: TImage;
SpeedButtonLogout: TSpeedButton;
SpeedButtonOptions: TSpeedButton;
SpeedButtonTaverne: TSpeedButton;
SpeedButtonArena: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButtonWache: TSpeedButton;
SpeedButtonWLaden: TSpeedButton;
SpeedButtonZLaden: TSpeedButton;
SpeedButtonStall: TSpeedButton;
SpeedButtonDealer: TSpeedButton;
SpeedButtonCharakter: TSpeedButton;
SpeedButtonPost: TSpeedButton;
SpeedButtonGilde: TSpeedButton;
SpeedButtonHalle: TSpeedButton;
SpeedButtonDungeons: TSpeedButton;
SpeedButtonCopy: TSpeedButton;
SpeedButtonSFgame: TSpeedButton;
SpeedButtonShop: TSpeedButton;
SpeedButtonForum: TSpeedButton;
SpeedButtonAnleitung: TSpeedButton;
procedure SpeedButtonForumClick(Sender: TObject);
procedure SpeedButtonLogoutClick(Sender: TObject);
procedure SpeedButtonSFgameClick(Sender: TObject);
procedure SpeedButtonTaverneClick(Sender: TObject);
private
{ private declarations }
fFrames: array[0..19] of TFrame;
fLastFrame: TFrame;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.SpeedButtonLogoutClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.SpeedButtonForumClick(Sender: TObject);
begin
OpenUrl('http://forum.sfgame.de/');
end;
procedure TForm1.SpeedButtonSFgameClick(Sender: TObject);
begin
OpenUrl('http://s10.sfgame.de/index.php?rec=19464');
end;
procedure TForm1.SpeedButtonTaverneClick(Sender: TObject);
begin
fLastFrame.Hide;
fFrames[TSpeedButton(Sender).Tag].Show;
fLastFrame := fFrames[TSpeedButton(Sender).Tag];
end;
initialization
{$I unit_sf.lrs}
end.
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: Via Button eine neue FrameForm aufrufen
Na weil du den Tag nicht gesetzt hast, so wie es im Vorgängerpost steht.
Edit: Außerdem hast du noch nicht mal das Array mit Werten gefüllt
Edit: Außerdem hast du noch nicht mal das Array mit Werten gefüllt
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
hmmm... also so gehts auch noch nicht
Code: Alles auswählen
unit unit_sf;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, ExtCtrls, ComCtrls, OpenURLUtil,
unitframe_start, unitframe_questhelper;
type
{ TForm1 }
TForm1 = class(TForm)
frame: TFrame2;
Image1: TImage;
SpeedButtonLogout: TSpeedButton;
SpeedButtonOptions: TSpeedButton;
SpeedButtonTaverne: TSpeedButton;
SpeedButtonArena: TSpeedButton;
SpeedButton5: TSpeedButton;
SpeedButtonWache: TSpeedButton;
SpeedButtonWLaden: TSpeedButton;
SpeedButtonZLaden: TSpeedButton;
SpeedButtonStall: TSpeedButton;
SpeedButtonDealer: TSpeedButton;
SpeedButtonCharakter: TSpeedButton;
SpeedButtonPost: TSpeedButton;
SpeedButtonGilde: TSpeedButton;
SpeedButtonHalle: TSpeedButton;
SpeedButtonDungeons: TSpeedButton;
SpeedButtonCopy: TSpeedButton;
SpeedButtonSFgame: TSpeedButton;
SpeedButtonShop: TSpeedButton;
SpeedButtonForum: TSpeedButton;
SpeedButtonAnleitung: TSpeedButton;
procedure SpeedButtonForumClick(Sender: TObject);
procedure SpeedButtonLogoutClick(Sender: TObject);
procedure SpeedButtonSFgameClick(Sender: TObject);
procedure SpeedButtonTaverneClick(Sender: TObject);
private
{ private declarations }
fFrames: array[0, 1, 2, 3, 4, 5] of TFrame;
fLastFrame: TFrame;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.SpeedButtonLogoutClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.SpeedButtonForumClick(Sender: TObject);
begin
OpenUrl('http://forum.sfgame.de/');
end;
procedure TForm1.SpeedButtonSFgameClick(Sender: TObject);
begin
OpenUrl('http://s10.sfgame.de/index.php?rec=19464');
end;
procedure TForm1.SpeedButtonTaverneClick(Sender: TObject);
begin
fLastFrame.Hide;
fFrames[TSpeedButton(Sender).1].Show;
fLastFrame := fFrames[TSpeedButton(Sender).1];
end;
initialization
{$I unit_sf.lrs}
end.
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 476
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: Via Button eine neue FrameForm aufrufen
Was gefällt dir an der Antwort nicht? Außer das man jetzt noch sage könnte:carli hat geschrieben:Na weil du den Tag nicht gesetzt hast, so wie es im Vorgängerpost steht.
Edit: Außerdem hast du noch nicht mal das Array mit Werten gefüllt
Code: Alles auswählen
TSpeedButton(Sender).1
An deinem Code kann man nicht sehen, dass die Tags gesetzt sind, das Array jetzt gefüllt ist, bzw. die Frames erstellt werden. Du verrätst noch nicht mal was der Compiler sagt bzw. was nicht geht. Wie soll da jemand antworten?
[Edit]
Ich glaube jetzt hab ich es verstanden.
Du wolltest mit "TSpeedButton(Sender).1" den Tag füllen? Gemeint war aber, das du der Variable "Tag", jedes SpeedButtons einen Wert zuweist, z.B.:
Code: Alles auswählen
SpeedButton1.Tag:=1;
Code: Alles auswählen
fFrames[TSpeedButton(Sender).Tag].Show;
fLastFrame := fFrames[TSpeedButton(Sender).Tag];
mfg Ingo
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
ich habs jetzt nochmal in nem neuen projekt einfach nur den wechsel der frames hinzubekommen aber ich bekomms nicht hin.
habe jetzt 2 TButtons
Der eine (Button1) da habe ich Tag auf 1 gestzt bei Button2 habe ich tag auf 2 gestzt.
es gibt 2 Frames und zwar Tframe1(in unit2) und Tframe2(in unit 3)
bei uses habe ich sie eingefügt:
habe jetzt 2 TButtons
Der eine (Button1) da habe ich Tag auf 1 gestzt bei Button2 habe ich tag auf 2 gestzt.
es gibt 2 Frames und zwar Tframe1(in unit2) und Tframe2(in unit 3)
bei uses habe ich sie eingefügt:
Code: Alles auswählen
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Unit2, Unit3;
//.....
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Frame1_1: TFrame1;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
//.....
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
fFrames: array[1,2] of TFrame;
fLastFrame: TFrame;
fFrames[TButton(Sender).Tag].Show;
fLastFrame := fFrames[TButton(Sender).Tag];
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
frame1.visible:=false;
form1.parent:=frame1;
frame2.visible:=ture;
end;
www.mcpatcher.net | www.hoeper.me
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
Schau dir bitte nochmal deinen Quelltext in deinem Post oben (direkt vor mir) an und überlege, ob der Compiler das wirklich so schluckt. Ja? Welchen Compiler verwendest du? 
TForm1.FormCreate() ist völliger Käse; vielleicht hast du hier aber auch nur var und begin vertauscht und letzteres vergessen.
TForm1.Button1Click() enthält ebenfalls Käse (aber semantisch richtigen); fram1 und fram2 sind irgendwo aber nicht in dieser Unit deklariert. form1 könnte in dieser Unit deklariert sein (vielleicht ist's eine Instanz von TForm1, vielleicht aber auch nicht). Wenn es ein Formular ist, ist es wohl nicht in deinem Sinne, dieses auf frame1 anzuzeigen (außer form1 ist ein TFrame und frame1 ist ein TForm, aber so verwirrt wirst du sicherlich nicht sein).

TForm1.FormCreate() ist völliger Käse; vielleicht hast du hier aber auch nur var und begin vertauscht und letzteres vergessen.
TForm1.Button1Click() enthält ebenfalls Käse (aber semantisch richtigen); fram1 und fram2 sind irgendwo aber nicht in dieser Unit deklariert. form1 könnte in dieser Unit deklariert sein (vielleicht ist's eine Instanz von TForm1, vielleicht aber auch nicht). Wenn es ein Formular ist, ist es wohl nicht in deinem Sinne, dieses auf frame1 anzuzeigen (außer form1 ist ein TFrame und frame1 ist ein TForm, aber so verwirrt wirst du sicherlich nicht sein).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
kann mir bitte einer das mal zeigen ich hab da ehrlich gesagt keine ahnung wie ich das jetzt anstellen soll...
so hab ich angefangen..... <--- zum download da klicken
VirusTotal Scan
so hab ich angefangen..... <--- zum download da klicken
VirusTotal Scan
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Via Button eine neue FrameForm aufrufen
ohne den link angesehen zu haben:
Bisher sieht dieser Thread für mich nicht so aus, als wäre dein Ziel selber was zu machen.
Falls der Schein trügen sollte, fang mit Beispielen an, bei denen du wenigstens halbwegs selbst weisst, in welcher Richtung das Ziel liegt.
Bisher sieht dieser Thread für mich nicht so aus, als wäre dein Ziel selber was zu machen.
Falls der Schein trügen sollte, fang mit Beispielen an, bei denen du wenigstens halbwegs selbst weisst, in welcher Richtung das Ziel liegt.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Via Button eine neue FrameForm aufrufen
doch mein ziel ist es schon sowas selbst zu machen und ich habe da auch schon einiges ausprobiert nur bin ich anfänger und irgenwie total überfordert.
deshalb würde ich mich sehr darüber freuen wenn mir das jemand einmal in dem minibeispiel machen könnte. dann kann ich es auf das andere programm übertragen und werde es bestimmt auch verstehen.
nur habe ich bis jetzt leider fast nur bahnhof verstanden
sry
deshalb würde ich mich sehr darüber freuen wenn mir das jemand einmal in dem minibeispiel machen könnte. dann kann ich es auf das andere programm übertragen und werde es bestimmt auch verstehen.
nur habe ich bis jetzt leider fast nur bahnhof verstanden
sry

www.mcpatcher.net | www.hoeper.me
Re: Via Button eine neue FrameForm aufrufen
Du solltest vielleicht mal eine Einführung in Pascal durcharbeiten.Bauer321 hat geschrieben: deshalb würde ich mich sehr darüber freuen wenn mir das jemand einmal in dem minibeispiel machen könnte.
Sorry, aber du weisst nicht mal wie man Variablen deklariert.
Das Forum eignet sich nicht, um die Grundlagen zu erlernen.