Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   XPLOSIVs Fragentheard (https://www.delphipraxis.net/98721-xplosivs-fragentheard.html)

XPLOSIV 31. Aug 2007 09:37


XPLOSIVs Fragentheard
 
Hallo allerseits, ich bin ziemlich neu in Delphi, also nimmt es mir bitte nicht übel wenn die Programmierung schlecht erscheint ;)

Meine Erste Frage, ich will einen noch nicht vorhandenen Button eine OnKlick Prozedur zuweisen, ich habe es so gemacht

Delphi-Quellcode:
MyButton.OnClick := MyRichEdit.SelectAll;
Nun sagt mir Delphi "Liste der Parameter unterschiedlich"

Was würde funktionieren ? Achja, die Var's stehen schon ;)


----------

Frage 2, ich habe einen Speichern Button erstellt, er soll den Inhalt der RichEdit, von der aktuellen Seite speichern, wenn die Datei schon funktioniert soll er sie überschreiben. Wenn nicht, SaveDialog1 ausführen. Doch bei mir speichert er weder den RichEdit1 von TabSheet2, noch den non der aktuellen Seite.

Delphi-Quellcode:
var
MyEdit: TRichEdit;
begin
   if SaveDialog1.FileName <> '' then MyEdit.lines.savetofile(SaveDialog1.Filename)
else begin
if SaveDialog1.Execute then
      MyEdit:=TRichEdit(PageControl1.ActivePage.Controls[0]);
      MyEdit.PlainText := True;
      MyEdit.Lines.SaveToFile(SaveDialog1.FileName);
end;

----------

Genau so ist es auch bei Speichern unter, hier erstellt er zwar die Datei (+Inhalt) doch gibt er gleich nach dem Speichern eine Fehlermeldung aus. Er soll wie oben beim Speichern falls TabSheet2 aktiviert ist, dort den Inhalt von RichEdit1 speichern, wenn nicht soll er von der aktuellen Seite das RichEdit (var=MyRichEdit) speichern.


Delphi-Quellcode:
begin
  SaveDialog1.Filter := 'NPC-Scripte (.d)|*.d';
  SaveDialog1.Execute;
  if SaveDialog1.FileName <> '' then
    begin
      TRichEdit(PageControl1.ActivePage.Controls[0]).PlainText := True;
      TRichEdit(PageControl1.ActivePage.Controls[0]).Lines.SaveToFile(SaveDialog1.FileName);
    end;
end;
-----------

Auch beim OpenDialog soll er falls TabSheet2 aktiviert ist, die Datei in RichEdit1 laden, falls nicht soll er sie in die RichEdit der aktuellen Seite laden.

Delphi-Quellcode:
begin
  SaveDialog1.Filter := 'NPC-Scripte (.d)|*.d';
  SaveDialog1.Execute;
  if SaveDialog1.FileName <> '' then
    begin
      TRichEdit(PageControl1.ActivePage.Controls[0]).PlainText := True;
      TRichEdit(PageControl1.ActivePage.Controls[0]).Lines.SaveToFile(SaveDialog1.FileName);
    end;
end;
------------

Dann wollte ich noch Syntax Highlighting einbauen, also das einige Wörter Dick, kursiv oder in einer anderen Farbe dargestellt werden. Ich hab mir schon SynEdit angeguckt, bin jedoch beim Installieren gescheitert, Anleitungen bei Google haben auch nix gebracht :( Kann mir einer erklären odder sagen wie es noch geht ?

Hoffe ihr könnt mir helfen, diese Probleme machen mir schon seit Tagen zu schaffen.

MfG XPLOSIV

mkinzler 31. Aug 2007 09:43

Re: XPLOSIVs Fragentheard
 
Die Signatur der Methoden muss stimmen. Wie sieht sie für MyRichEdit.SelectAll aus?

XPLOSIV 31. Aug 2007 09:48

Re: XPLOSIVs Fragentheard
 
Zitat:

Zitat von mkinzler
Die Signatur der Methoden muss stimmen. Wie sieht sie für MyRichEdit.SelectAll aus?

Hmm...Ich verstehe nicht ganz, wie gesagt bin seeehr Neu :oops:

mkinzler 31. Aug 2007 09:49

Re: XPLOSIVs Fragentheard
 
Signatur = Anzahl un Typen der Parameter und des Rückgabewertes

XPLOSIV 31. Aug 2007 09:56

Re: XPLOSIVs Fragentheard
 
Hmm, also ich weiß nicht, ich hab das einfach so hingeschrieben, hier mal ein bisschen mehr vom Source.

Delphi-Quellcode:
//Button für das TabSheet erstellen
  MyButton:= TButton.Create(ts);
  MyButton.Parent:= ts; //damit wird dem Button das TabSheet als übergeordnete Komponente zugewiesen
  MyButton.Name:= 'Button'+IntToStr(PageControl1.PageCount);
  MyButton.Caption:= 'Skript kopieren';
  //Funktion zuweisen
   MyButton.OnClick := MyRichEdit.SelectAll;


Hoffe das Hilft ;)

mkinzler 31. Aug 2007 10:01

Re: XPLOSIVs Fragentheard
 
Wie gesagt die Signaturen müssen übereinstimmen. tun sie aber nicht.

Erwartet wird void (TObject) und .SelectAll hat void (void).

Delphi-Quellcode:
Procedure Form1.ButtonOnClic( Sender: TObject);
begin
    MyRichEdit.SelectAll;
end;
,,,
MyButton.OnClick := ButtonOnClick;

jim_raynor 31. Aug 2007 10:04

Re: XPLOSIVs Fragentheard
 
Ich kann mir vorstellen, dass es für dich einfacher ist alle Fragen in einem Thread zu stellen. Es ist allerdings gängige Praxis hier und es steht auch in den Foren-Regeln drin, dass für jede Frage ein Thread eröffnet werden soll.
Der Grund ist ganz einfach, dass die Diskussionen nicht übermäßig unüberschaubar werden und was eigentlich viel wichtiger ist, dass Suchende einfacher die richtigen Antworten finden.

XPLOSIV 31. Aug 2007 11:23

Re: XPLOSIVs Fragentheard
 
Oh danke, jetzt bin ich schlauer, hmm ch versteh das net, heißt das es ist unmöglich oder wie ? Wo soll ich denn den Code hinschreiben, der Button ist ja erstmal garnicht da, sondern er wird erstellt.


Hoffe jemand kann mir helfen :( :cry:

mkinzler 31. Aug 2007 11:28

Re: XPLOSIVs Fragentheard
 
Ist egal ob der Button schon existiert. deshalb wird ja auch die Methode zur Laufzeit zugewiesen.
Du könntest dir auch eine abgeleitete Button-Klasse basteln.

XPLOSIV 31. Aug 2007 11:40

Re: XPLOSIVs Fragentheard
 
Zitat:

Zitat von mkinzler
Ist egal ob der Button schon existiert. deshalb wird ja auch die Methode zur Laufzeit zugewiesen.
Du könntest dir auch eine abgeleitete Button-Klasse basteln.


Wie soll ich das machen ? Was und wo soll ich hinschreiben ?

Kann mir mal einer ordentliche Anleitung für SynEdit installieren geben, oder sagen wie man mit Delphi alleine Syntax Highlighting einbaut ?

MfG XPLOSIV

mkinzler 31. Aug 2007 11:45

Re: XPLOSIVs Fragentheard
 
http://www.dsdt.info/tutorials/?cat=1

XPLOSIV 31. Aug 2007 12:21

Re: XPLOSIVs Fragentheard
 
Ok gut, hab das jetzt mal gemacht, doch wie kann ich die Wörter hinzufügen die Hervorgehoben werden sollen ?

Achja, kann sich bitte einer mal die Speichern,Speichern unter und Öffnen Probleme angucken ? Die dürften ja ehe nur als ein Problem gelten, weil sie alle die selbe Macke haben.


MfG XPLOSIV

angos 31. Aug 2007 13:58

Re: XPLOSIVs Fragentheard
 
Hi,

machs mal so (ungetestet)


Delphi-Quellcode:
var
  MyEdit: TRichEdit;
begin
  if ((SaveDialog1.FileName <> '') or (SaveDialog1.Execute)) then
  begin
    MyEdit := TRichEdit(PageControl1.ActivePage.Controls[0]); // das ist ziemlich gefährlich... was ist wenn control[0] kein Richedit ist ;)
    MyEdit.PlainText := True;
    MyEdit.Lines.SaveToFile(SaveDialog1.FileName);
  end;
end;
[EDIT] noch wesentlich einfacher dürfte das sein:

Delphi-Quellcode:
begin
  if ((SaveDialog1.FileName <> '') or (SaveDialog1.Execute)) then
  begin
    // Hier kannste auch einfach den NAMEN des Richedits einsetzen
    TRichEdit(PageControl1.ActivePage.Controls[0]).PlainText := True;
    TRichEdit(PageControl1.ActivePage.Controls[0]).Lines.SaveToFile(SaveDialog1.FileName);
  end;
end;

Und schau dir ruhig nochmal die ganzen Tutorials an, die mkinzler verlinkt hat, die dürften für dich Gold wert sein!

Gruß

XPLOSIV 31. Aug 2007 14:14

Re: XPLOSIVs Fragentheard
 
Jo hatte ich angeguckt, ne leider funktioniert der auch nicht :( :cry:


Bin echt am Verzweifeln...

Hab inzwischen TRichEdit in TSynEdit eingewechselt.

Bei deinem Code kommt auch Fehlermeldung beim Speichern...

angos 31. Aug 2007 14:28

Re: XPLOSIVs Fragentheard
 
ich tippe mal, wie ich im Quellcode schon vermutet hatte ist das problem hier -> ActivePage.Controls[0]

Warum schreibst du nicht einfach den Namen des Richedits rein? (In folgendem Beispiel heisst das Richedit "Richedit1")
Delphi-Quellcode:
begin
  if ((SaveDialog1.FileName <> '') or (SaveDialog1.Execute)) then
  begin
    RichEdit1.PlainText := True;
    RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);
  end;
end;
wenn das nichts hilft, zippe das gesamte projekt und stell es hoch, dann schau ichs mir gern nochmal an. Achja und noch was: mkinzler hat den Link um 12:45 gepostet... du willst mir nicht wirklich erzählen, dass du alle tutorials in 2,5Std durchgearbeitet hast?
Nicht nur mal kurz drübergucken, Durcharbeiten! Nur so wirst du die Zusammenhänge besser verstehen. Ist nicht bös gemeint, möchts nur deutlich sagen!

Gruß

[edit]falschen text korrigiert[/EDit]

XPLOSIV 31. Aug 2007 15:07

Re: XPLOSIVs Fragentheard
 
Zitat:

Zitat von angos
ich tippe mal, wie ich im Quellcode schon vermutet hatte ist das problem hier -> ActivePage.Controls[0]

Warum schreibst du nicht einfach den Namen des Richedits rein? (In folgendem Beispiel heisst das Richedit "Richedit1")
Delphi-Quellcode:
begin
  if ((SaveDialog1.FileName <> '') or (SaveDialog1.Execute)) then
  begin
    RichEdit1.PlainText := True;
    RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);
  end;
end;
wenn das nichts hilft, zippe das gesamte projekt und stell es hoch, dann schau ichs mir gern nochmal an. Achja und noch was: mkinzler hat den Link um 12:45 gepostet... du willst mir nicht wirklich erzählen, dass du alle tutorials in 2,5Std durchgearbeitet hast?
Nicht nur mal kurz drübergucken, Durcharbeiten! Nur so wirst du die Zusammenhänge besser verstehen. Ist nicht bös gemeint, möchts nur deutlich sagen!

Gruß

[edit]falschen text korrigiert[/EDit]


Neee^^ Schon vor einigen Tagen hab ich mir die angeguckt. Den Link kannte ich ja schon^^

Hmm.. das ist aber nicht so einfach, wenn ich RichEdit1 mache, speichert er doch nur das RichEdit auf TabSheet2 oder ?

Denn die anderen TabSheets (die der User per KnopfDruck erstellen kann) sind so:

Delphi-Quellcode:
MyRichEdit.Name:= 'RichEdit'+IntToStr(PageControl1.PageCount);

angos 31. Aug 2007 15:11

Re: XPLOSIVs Fragentheard
 
Zippe das Projekt und stells hoch.. ich schau dann gern rein


Gruß

XPLOSIV 31. Aug 2007 15:26

Re: XPLOSIVs Fragentheard
 
Also ich will den Source noch nicht öffentlich machen, aber sag einfach was du willst, ich kann dir die einzelnen Teile zeigen, oder nimm mich in ICQ auf, wenn ich einen einzelnen den Source geben macht das ehe nicht viel ;)


Meine Nummer: 336-177-135

angos 31. Aug 2007 15:33

Re: XPLOSIVs Fragentheard
 
Hi Xplosiv,

ich kann dir leider so nicht sagen was ich brauche, ist dafür noch ein wenig undurchsichtig die ganze Problematik. Du kannst mir ja den source per pn schicken, wenn du möchtest... ich werde den vertraulich behandeln. ICQ habe ich nicht installiert ;)

[Edit]Achja, bevors vergessen wird... Ich bin mal so frei: Herzlich willkommen in der DP :dp: :hi: [/Edit]

Gruß

XPLOSIV 31. Aug 2007 16:14

Re: XPLOSIVs Fragentheard
 
Oh Vielen Dank für den freundlichen Empfang ;)

Ok ich vertraue dir mal und habe mein gesamtes Projekt per PN geschickt ;)

Hoffe du kennst die Antworten auf meine Probleme ;)

Daniel 31. Aug 2007 20:24

Re: XPLOSIVs Fragentheard
 
Hallo XPLOSIV und auch von mir ein herzliches Willkommen in der Delphi-PRAXiS.

Du bist neu hier und genießt daher einen gewissen Welpenschutz. :stupid: In Deinem Thema hier geht es ein wenig drunter und drüber. Das liegt im Wesentlichen daran, dass Du gleich mehrere Fragen auf einmal gestellt hast. Es wäre etwas übersichtlicher gewesen, wenn Du für jede Frage ein neues Thema eröffnet hättest. Sparsamkeit ist in dieser Hinsicht ausnahmsweise mal keine Tugend.

Daher meine Bitte an Dich für die Zukunft: Pro Frage ein neues Thema (sofern die Suchfunktion keine Antworten liefert ;-) ).

Und dass Du mir nicht wieder mit ICQ fremd gehst. :warn: Dieses Forum lebt von der Diskussion. Das heißt, dass hier Fragen aufgeworfen und Lösungen präsentiert werden. Und davon können dann wieder andere profitieren. Wenn Du die Quellen Deines Projektes nicht veröffentlichen kannst oder darfst, so ist das in der Regel nur zu verständlich. Geht mir nicht anders. Aber dann musst Du - sofern Du dieses Forum nutzen möchtest - Deine Fragen so formulieren, dass sie auch mit einer Mindest-Menge an Code verständlich sind. Das ist hin und wieder eine gewisse Herausforderung, das gebe ich zu - aber es lohnt sich. ;-)


Nun mache ich an dieser Stelle mal zu und wenn Du weitere Fragen hast, dann scheue Dich nicht, neue Thema zu eröffenen, denen Du bitte aussagekräftige Titel geben wirst. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz