ERLEDIGT
NEIN
NEIN
ANTWORTEN
14
14
ZUGRIFFE
5278
5278
EMPFEHLEN
-
Wollte mal fragen wie ich es erreichen kann das ich in der Menüleiste die ich eben stehn habe unter Info => Hinweis
Wenn ich nun auf Hinweis klicke möchte ich das ein Popup Fenster "Feste Grösse" aufspringt und dann in diesem Der Inhalt steht
Beisp.: Version: 0.0
Sowas in der Art
Anhang:
- die Fertige Exe damit ihr euch ein Kleines Bild machen könnt was ich meine
Wäre nett wenn ihr mir da sagen könnt wie ich das realisieren kann
DANKE
-
06.02.08 09:26 #2
Hey,
ich weiß zwar nicht ganz genau was du mit "feste Größe" meinst aber es gibt für "Popup"-Fenster einige Möglichkeiten.
Wenn dir eine Meldung reicht kannst du es mit:
Man kann ShowMessage() auch mehrzeilig erstellen etc. einfach mal inCode delphi:1
ShowMessage('Version: 0.1.2.3.');
suchen
Wenn du aber ein eigenes Formular haben möchtest, dann musst du ein neues Formular einfügen das per #include in dein Projekt einbinden (ich weiß nicht ob die Entwicklungsumgebungen von Delphi das nicht selber machen) dann in dem OnClick-Ereignis den Code für den Aufruf des Formulars reinschreiben.
Leider habe noch kein bzw. nur sehr wenig erfahrung mit Delphi und habe hier (auf der Arbeit) keine Entwicklungsumgebung.
Deswegen hoffe ich das dieses dir als anregung hilfreich ist.
Gruß
Rudolf GraubergerGeändert von RudolfG (06.02.08 um 09:28 Uhr)
Technologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
-
06.02.08 09:42 #3
- Registriert seit
- Mar 2004
- Beiträge
- 441
Neben dem ShowMessage gibt es auch noch
wobei Msg einen String mit dem Text enthält, Typ die Art des Popupfensters (z.b. mtInformationen, mtError etc.) und Buttons ein Set mit den Buttons ist, die angezeigt werden sollen, wobei ich meist [mbOK] oder [mbCancel] verwende.Code delphi:1 2 3 4
use Borland.Vcl.Dialogs; CreateMessageDialog(Msg, Typ, Buttons);
-
Ich habe in dem Projekt noch ein Fenster erstellt diesen eine Feste Grösse verpasst
Nun wollte ich wenn man auf Hinweis klickt genau dann das Fenster auf geht welches ich in das Projekt hinzugefügt habe
Hier der Quellcode:
Code delphi:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
program Metin2Markt_; uses Forms, Metin2Markt in 'Metin2Markt.pas' {m2m}, info_hinweis in 'info_hinweis.pas' {InfoHinweis1}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(Tm2m, m2m); Application.CreateForm(TInfoHinweis1, InfoHinweis1); Application.Run; end.
Und hier über Click sollte es dann geschehn:
Code delphi:1 2 3 4 5
//Hinweis zur Version und Autor des Programms im Popup procedure Tm2m.Hinweis1Click(Sender: TObject); begin end;
Hier mal der Komplette Code:
Code delphi:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
unit Metin2Markt; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, OleCtrls, SHDocVw, ComCtrls, ActnPopup; type Tm2m = class(TForm) WebBrowser1: TWebBrowser; // Webbrowser MainMenu1: TMainMenu; // Menü Datei1: TMenuItem; // Allgemeines zur Metin2Markt Eintragen1: TMenuItem; // Neues Item eintragen Beenden1: TMenuItem; // Programm beenden Info1: TMenuItem; // Version und Autor hinweis Hinweis1: TMenuItem; // Hinweis AdminCP1: TMenuItem; // Nur Für AdminRechten AllEintrge1: TMenuItem; // Alle einträge anzeigen Items1: TMenuItem; // Neue Items Anzeigen und gegenenfalls Freischalten ItemsDel1: TMenuItem; // Löschen bestimmter Items procedure FormCreate(Sender: TObject); procedure Eintragen1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Hinweis1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var m2m: Tm2m; //Das Allgemeine Form-Fenster implementation {$R *.dfm} // Webseite im Frame anzeigen procedure Tm2m.FormCreate(Sender: TObject); begin Webbrowser1.Navigate('www.google.de'); end; //Eintragen Button => Zum Eintragen eines neuen Items procedure Tm2m.Eintragen1Click(Sender: TObject); begin Webbrowser1.Navigate('www.google.de'); end; //Hinweis zur Version und Autor des Programms im Popup procedure Tm2m.Hinweis1Click(Sender: TObject); begin end; //Beenden des Programms procedure Tm2m.Beenden1Click(Sender: TObject); begin m2m.Close; end; end.
-
06.02.08 10:55 #5
Hallo,
irgendwie vermisse die Frage!
Ich könnte mir jetzt vorstellen das du nicht weißt wie man das zweite Formular aufrufen kann, aber diese "vermutungen" etc. könnte ich mir (ich bin sicher die anderen sehen das auch so) ersparen.
folgende Zeile würde ich einfach mal rauslöschen da die -meiner Meinung- nicht dahin gehört. Damit erzeugst du nämlich das Formular nachdem das erste Formular "geschlossen" wurde. (lasse mich aber gern korrigieren)
Code delphi:1
Application.CreateForm(TInfoHinweis1, IntoHinweis1);
Wie währ es wenn du hier das Objekt erzeugst? (wie das in Delphi geht weiß ich leider -noch- nicht!)
Anzeigen kannst du das Formular mit z. b.
Code delphi:1
form2.ShowModal;
Gruß
Rudolf GraubergerGeändert von RudolfG (06.02.08 um 10:58 Uhr)
Technologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
-
Werd das mal machen danke...
Eventuell hat da ja noch jemand genaueres
Ich bin nicht so der Brummer in Delphi muss mich da noch einarbeiten aber das meiste erstell ich selber gut manches fand ich bei Google aber das mit dem Extra Formular irgendwie nix gefunden
Dennoch danke
-
06.02.08 11:30 #7
Hab einwenig bei Google gesucht und mein jetzt verstanden zu haben wie man ein neues Objekt(Formular) anlegt.
Ist nicht ausprobiert!
Code delphi:1 2 3 4 5 6 7 8
//Hinweis zur Version und Autor des Programms im Popup procedure Tm2m.Hinweis1Click(Sender: TObject); var Info: TInfoHinweis1; begin info := TInfoHinweis1.Create; //Objekt wird erzeugt info.ShowModal; //Formular wird angezeigt end;
Ich hoffe das es so funktioniert bzw. so richtig ist.
Gruß
Rudolf GraubergerTechnologien
(Gute) Grundkenntnisse: HTML, CSS
Fortgeschrittene-Kenntnisse: C++/Qt, C# (WinForms, Webservice), SQL
-
06.02.08 11:50 #8
- Registriert seit
- Mar 2004
- Beiträge
- 441
-
Bei mir kommt jetzt wenn ich es compiliere diese Meldung:
Hier noch mal der Code[DCC Fehler] Metin2Markt.pas(54): E2003 Undefinierter Bezeichner: 'TInfoHinweis1'
[DCC Fehler] Metin2Markt.pas(56): E2066 Operator oder Semikolon fehlt
[DCC Fehler] Metin2Markt.pas(57): E2066 Operator oder Semikolon fehlt
[DCC Fehler] Metin2Markt_.dpr(6): F2063 Verwendete Unit 'Metin2Markt.pas' kann nicht compiliert werden
Code delphi:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
unit Metin2Markt; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, OleCtrls, SHDocVw, ComCtrls, ActnPopup; type Tm2m = class(TForm) WebBrowser1: TWebBrowser; // Webbrowser MainMenu1: TMainMenu; // Menü Datei1: TMenuItem; // Allgemeines zur Metin2Markt Eintragen1: TMenuItem; // Neues Item eintragen Beenden1: TMenuItem; // Programm beenden Info1: TMenuItem; // Version und Autor hinweis Hinweis1: TMenuItem; // Hinweis AdminCP1: TMenuItem; // Nur Für AdminRechten AllEintrge1: TMenuItem; // Alle einträge anzeigen Items1: TMenuItem; // Neue Items Anzeigen und gegenenfalls Freischalten ItemsDel1: TMenuItem; // Löschen bestimmter Items procedure FormCreate(Sender: TObject); procedure Eintragen1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Hinweis1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var m2m: Tm2m; //Das Allgemeine Form-Fenster implementation {$R *.dfm} // Webseite im Frame anzeigen procedure Tm2m.FormCreate(Sender: TObject); begin Webbrowser1.Navigate('www.google.de'); end; //Eintragen Button => Zum Eintragen eines neuen Items procedure Tm2m.Eintragen1Click(Sender: TObject); begin Webbrowser1.Navigate('www.google.de'); end; //Hinweis zur Version und Autor des Programms im Popup procedure Tm2m.Hinweis1Click(Sender: TObject); var Info: TInfoHinweis1; begin info:= TInfoHinweis1.Create; //Objekt wird erzeugt info.ShowModal; //Formular wird angezeigt end; //Beenden des Programms procedure Tm2m.Beenden1Click(Sender: TObject); begin m2m.Close; end; end.
-
06.02.08 13:47 #10
- Registriert seit
- Mar 2004
- Beiträge
- 441
Füg mal unter deinem
noch einCode delphi:1 2 3 4
var m2m: Tm2m; //Das Allgemeine Form-Fenster implementation
, wobei TFormHintDateiname der Name ist, unter dem du die Unit abgespeichert hast, ohne das abschliessende ".pas".Code delphi:1 2
uses TFormHintDateiname;
Dadurch teilt du dann deinem Formular mit, dass es noch andere Formulare gibt, die innerhalb von ihm verwendet werden sollen. Ansonsten hat ja dein Tm2m wirklich keine Ahnung, was denn das TFormHint1 sein soll.
-
Hmm... seltsam hab das nun gemacht
Aber nun bekomm ich diese meldung
[DCC Fehler] Metin2Markt.pas(60): E2035 Nicht genügend wirkliche Parameter
[DCC Fehler] Metin2Markt_.dpr(6): F2063 Verwendete Unit 'Metin2Markt.pas' kann nicht compiliert werdenCode delphi:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
unit Metin2Markt; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, OleCtrls, SHDocVw, ComCtrls, ActnPopup; type Tm2m = class(TForm) WebBrowser1: TWebBrowser; // Webbrowser MainMenu1: TMainMenu; // Menü Datei1: TMenuItem; // Allgemeines zur Metin2Markt Eintragen1: TMenuItem; // Neues Item eintragen Beenden1: TMenuItem; // Programm beenden Info1: TMenuItem; // Version und Autor hinweis Hinweis1: TMenuItem; // Hinweis AdminCP1: TMenuItem; // Nur Für AdminRechten AllEintrge1: TMenuItem; // Alle einträge anzeigen Items1: TMenuItem; // Neue Items Anzeigen und gegenenfalls Freischalten ItemsDel1: TMenuItem; // Löschen bestimmter Items procedure FormCreate(Sender: TObject); procedure Eintragen1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure Hinweis1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var m2m: Tm2m; //Das Allgemeine Form-Fenster implementation uses info_hinweis; {$R *.dfm} // Webseite im Frame anzeigen procedure Tm2m.FormCreate(Sender: TObject); begin Webbrowser1.Navigate('www.google.de'); end; //Eintragen Button => Zum Eintragen eines neuen Items procedure Tm2m.Eintragen1Click(Sender: TObject); begin Webbrowser1.Navigate('www.google.de'); end; //Hinweis zur Version und Autor des Programms im Popup procedure Tm2m.Hinweis1Click(Sender: TObject); var Info: TInfoHinweis1; begin Info.Create; // Objekt wird erzeugt Info.ShowModal; // Formular wird angezeigt end; //Beenden des Programms procedure Tm2m.Beenden1Click(Sender: TObject); begin m2m.Close; end; end.
Irgendwie mach der das nicht so wirklich
-
07.02.08 07:34 #12
- Registriert seit
- Mar 2004
- Beiträge
- 441
"Der" sind der Compiler und der Linker und solange du deren Meldungen binär verwendest (Fehlermeldung = Alles falsch, laut um Hilfe rufen; keine Fehlermeldung = alles richtig) wirst du auf lange Sicht keine ordentlichen Programme schreiben können und ziemlich viel Mist mit dem Speicher anstellen.
Der Compiler sagt dir nämlich ganz genau, was ihm nicht passt, man muss es nur auch einmal lesen:
Metin2.Markt.pas, Zeile 60. Was steht denn das drin?
Und was soll das jetzt heissen?Code delphi:1
Info.Create; // Objekt wird erzeugt
Genau das, was der Compiler sagt. Dein Programm versucht die Methode Create() aufzurufen und da fehlen noch irgendwelche Parameter. In deinem ganzen TInfoHinweis wirst du aber keine Methode namens Create() finden. Jetzt heisst es aber in jedem Buch zu Delphi, dass Delphi objekorientiert läuft. Das bedeutet auch, dass dein TInfoHinweis von einer anderen Klasse abgeleitet sein kann und von dieser Elternklasse das Create() geerbt haben kann.
Um was wetten wir, dass sich in deinem info_hinweis.pas folgende Zeile findet?
Die bedeutet wieder nichts anderes, als dass dein TInfoHinweis von TForm abgeleitet ist. Du hast aber nie eine Klasse TForm angelegt. Da liegt der begründete Verdacht nahe, dass es sich bei TForm um eine Delphiklasse handelt.Code delphi:1 2
type TInfoHinweis = class(TForm)
Und das ist ein so typischer Fall, dass ich gar nicht anders kann, als zu sagen: RTFM!
Denn genau dafür sind offline Dokumentationen und Hilfssysteme da!
In der Borlandhilfe finden sich mit dem Stichwort "TForm" sofort mehrere Einträge die auch alle mehr oder weniger direkt auf die Seite mit der Beschreibung der TForm-Klasse führen. Und bei der befindet sich unter den Methodenbeschreibungen auch das hier:
Alles zurückgespult...TCustomForm.Create Konstruktor
Erzeugt und initialisiert ein neues TForm-Objekt.
Klasse
TCustomForm
Syntax
[Delphi] constructor Create(AOwner: TComponent);
Beschreibung
Mit Create können Sie ein neues Objekt der Klasse TForm oder einer abgeleiteten Klasse von TForm zur Laufzeit instantiieren. Der Parameter AOwner gibt den Eigentümer des TCustomForm-Objekts an.
...
...und schon sind wir wieder bei
Die Hilfe sagtCode delphi:1
Info.Create; // Objekt wird erzeugt
Du hast keinen Parameter. Der gleichen Meinung ist auch der Compiler:Der Parameter AOwner gibt den Eigentümer des TCustomForm-Objekts an.
Und hier jetzt die Lösung:E2035 Nicht genügend wirkliche Parameter
Gib deinem Create einfach irgendein Objekt mit. Derzeit dürfte es für dich noch keine Rolle spielen, ob du wirklich den Owner oder sonst was übergibst. Am einfachsten dürfte es sein mit
Code delphi:1
Info.Create(self); // Objekt wird erzeugt
Und noch ein Tip am Rande:
Ich halte es für extrem unwahrscheinlich, dass du wirklich die Programmierung in Delphi lernen kannst ohne dass du
- wenigstens mal irgendein Handbuch zu Pascal und/oder Delphi gelesen hast
- auch wirklich Fehlermeldungen liest und versuchst, sie zu verstehen (auch bei Fehlermeldungen funktioniert F1)
- die Onlinehilfe von Delphi benutzt.
-
Hmm... jetzt compiliert er es zwar alles richtig...
Nur kommt dann beim Klick auf Info bzw. Hinweis...
Zugriffsverletzung
Gibt es eigentlich auch eine Etwas vereinfachte Variante wie man sowas machen kann wie man es ja bei vielen Programmen sieht wenn man auf Info [?] klickt und dann auf "Über Mozilla Firefox geht" ?
Oder gibt es da nur diese Variante
PS: Und ja ich bin da drin Anfänger... und ja ich habe mich auch schlau gemacht bevor ich gepostet hab was den der Fehlende Parameter sein könnte...
Habe aber dazu nix finden können Sorry
-
08.02.08 08:06 #14
- Registriert seit
- Mar 2004
- Beiträge
- 441
Ok, dann nochmal etwas deutlicher.
Die Stichworte für dich (zum Suchen) sind "dynamische Formularerstellung". Insofern ok, ohne die richtigen Stichworte kann das Suchen in der Hilfe etwas hart sein.
Die Zugriffverletzung kommt jetzt daher (davon ausgehend, dass du einfach nur meine Zeile 1:1 so abgetippt hast):
Dein TInfoHinweis (abgeleitet von TForm) ist eine Klasse, eine Art Template, eine Schablone. In deiner Clickfunktion ist Info ein Zeiger (ich stamme aus der C++-Ecke und kenne nur diese Begriffe wirklich auswendig, evtl. heissen die in Delphi anders) auf "irgendein Ding" vom Typ TInfoHinweis.
Zum Zeitpunkt der Funktion ist aber Info eben immer noch nur der Zeiger auf "irgendein Ding" vom Typ TInfoHinweis und mit so etwas wie "irgendein Ding" mögen Compiler, Debugger und Betriebssystem aber überhaupt nichts anfangen und sind auch zu 0% tolerant sondern meckern dich sofort an vom Feinsten.
Du musst also aus "irgendein Ding" ein "genau DAS DA-Ding" machen.
Dafür ist der Create-Befehl.
Nur hast du mit hoher Wahrscheinlichekeit eben 1:1 abgeschrieben und hast in deinem Code stehen:
Info ist aber immer noch ein Zeiger auf "irgendein Ding", welcher der Compiler nicht kennt oder versteht. Was der Compiler aber versteht ist: Info ist von TInfoHinweis, er schaut nach und findet in der Definition von TInfoHinweis... kein Create. Aber die Klassendefinition von TInfoHinweis zeigt auf TForm und in TForm... jup, da gibt es den Create.Code delphi:1
Info.Create(self)
Also ist der Create theoretisch möglich. Praktisch aber ist und bleibt Info "irgendein Ding".
Um aus TInfo ein "genau DAS DA-Ding" zu machen brauchst du diesen Befehl:
Übersetzt heisst das, dass TInfo jetzt wieder auf etwas zeigt.Code delphi:1
Info := TInfoHinweis.Create(self);
Auf was?
Also da wird erstmal TInfoHinweis genommen. Und das gibt es! Das ist etwas ganz Konkretes, mit dem Compiler und Computer etwas anfangen können.
Und der Befehl Create bewirkt im Prinzip nichts anderes, als dass von TInfoHinweis eine Art "Kopie" erstellt und im Speicher des Computer abgelegt wird.
Und wo liegt diese Kopie?
Genau darauf zeigt ab jetzt Info und wird so von einem "irgendein Ding" zu einem "genau DAS DA-Ding" vom Typ TInfoHinweis. Und schon sind alle zufrieden und es gibt keinen Zugriffsfehler mehr.
Nein, ich will dich mit diesem Post nicht verarschen, das ist vielmehr tatsächlich die Art und Weise, wie ich mir früher selbst das Prinzip der Klasseninstanziierung gemerkt habe.
Stichworte zum weiteren Suchen wären:
- Klassen und Objekte
- Instanzen bzw. Instaziierung
- Objektorientierung und Vererbung
P.S.: "irgendein Ding" wird dann später bekannt als "null pointer exception" bzw. nicht instaziiertes Objekt, das "genau DAS DA-Ding" ist dann später ein Zeiger auf eine Klasseninstanz.
P.P.S.:
Für dich ist das vielleicht nur ein kleiner Klick, für dein Programm kann das zu Schwerarbeit ausufern. Und sobald man sich mal mit dem Prinzip der objektorientierten Programmierung auseinander gesetzt und angefreundet hat, ist es gar nicht mal mehr so schwer oder aufwändig. Ein "wasch mich, aber mach mich dabei nicht naß" ist eben einfach nicht möglich.Geändert von CSANecromancer (08.02.08 um 08:09 Uhr)
-
Achso...
Gut das mit dem Stichwort suchen da bin ich schon verzweifelt da er mir zwar was raus geschmissen hat nach was ich gesucht habe aber nicht das Ergniss gefunden welches ich benötigte...
Wenn ich die Suche mit den Richtigen Stichwort gesucht "hätte" dann wäre ich bestimmt schlauer wie ich es jetzt bei dir bin wofür ich euch so lobe das es euch gibt...
Ich werd da nochmal genauer suchen und deines beherzigen sowie auch zum teil übernehmen
PS: Ja hab es 1:1 übernommen xD zumindestens das Create(self)
Ansonsten schreib ich meist alles selber... aber Delphi ist so Benutzer Freundlich das man da eigentlich kaum gross was machen muss ausser halt eben Zusatzfunktionen wie meine xD
Ähnliche Themen
-
Prüfung ob PopUp noch offen / Popup anhand Fensternamen schliessen
Von SYS83 im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 04.08.10, 12:51 -
Flash: nicht als popup erstellen
Von hehe_me im Forum Flash PlattformAntworten: 3Letzter Beitrag: 06.05.09, 15:58 -
Popup erstellen
Von BIAsTeR im Forum Adobe Flex & AIRAntworten: 1Letzter Beitrag: 31.12.08, 13:11 -
Variablenübergabe mit Popup und Bild erstellen
Von Bencher im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 07.11.06, 14:20 -
PopUp + noch ein PopUp überm PopUP :-)
Von derSchneider im Forum Flash PlattformAntworten: 3Letzter Beitrag: 16.03.03, 13:38





Zitieren

Login





