Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Syntax-Datenbank (https://www.delphipraxis.net/165366-syntax-datenbank.html)

Mpex 26. Dez 2011 22:07

Syntax-Datenbank
 
Guten Abend,
ich denke mir zwar, dass die Frage ziemlich dämlich ist, aber wo finde ich eine Übersicht über die Befehle in Delphi, am besten mit Beispielcode usw?
Klar gibts hier und auch auf anderen Delphiseiten Tutorials (hier z.B. unter "nützliche Links"), aber die sind ja alle unvollständig.

Um das an einem Beispiel klären zu können: Ich möchte in meinem aktuellen Programm ein Timage benutzen, es hapert aber schon an der erstellung - er kennt Timage nicht. Sicher muss ich bei uses irgendetwas dazu reinschreiben, aber wie kann ich soetwas nachsehen? Immerhin bin ich Anfänger und es kann ja nicht im Sinne des Erfinders sein, dass ich euch jedesmal nerve, wenn ich soein Problem habe. In diesem Fall hab ich mir schon bestimmt 100 Themen angesehen, doch in keinem wird erwähnt, dass irgendetwas nötig ist, um Delphi beizubringen, was Timage ist. Und auf Seiten wie "http://www.delphibasics.co.uk/" finde ich dazu auch nichts. Es muss ja offensichtlich sein, aber ich finde es nicht.. Wäre jemand so nett, mir auf die Sprünge zu helfen?

Dankeschön!

implementation 26. Dez 2011 22:10

AW: Syntax-Datenbank
 
In der Delphi-Referenz solltest du alle Komponenten und Units finden ;)

himitsu 26. Dez 2011 22:52

AW: Syntax-Datenbank
 
Wie/wo willst du das Delphi-Referenz durchsuchenTImage (das ist ein Link und wie genannt, kommt man da auch mit F1 hin) denn benutzen?

Als VCL-Komponente pappt man das einfach von der Tool-Palette auf die Form und Delphi bindet automatisch die nötige Unit ein.

Zitat:

Zitat von Mpex (Beitrag 1143206)
Es muss ja offensichtlich sein,

Ist es auch.
F1 > OH

Namenloser 26. Dez 2011 22:53

AW: Syntax-Datenbank
 
Stimmt, grundsätzlich hat Delphi aber auch eine integrierte Hilfe-Funktion. Einfach irgendwo in den Quellcode-Editor z.B. „TImage“ schreiben und F1 drücken (und den passenden Treffer aus der sich öffnenden Liste wählen – das ist in der Regel irgendwas mit „Referenz“). In der Hilfe werden alle Eigenschaften, Methoden usw. aufgelistet, oft mit kleinen Beispielen. Auch die Vererbungshistorie und die Unit, in der die Klasse deklariert ist, finden sich natürlich dort.

Mpex 27. Dez 2011 10:37

AW: Syntax-Datenbank
 
Guten Tag,
danke ersteinmal für die vielen schnellen Antworten. Die Delphi-Referenz und die integrierte Delphi-Hilfe werd ich mir ab jetzt aufjedenfall anschaun, bevor ich Fragen stelle, danke :)

Allerdings, als ich danach suchte bin ich zu ms-help://embarcadero.rs2009/delphivclwin32/ExtCtrls_TImage.html und http://docwiki.embarcadero.com/VCL/de/ExtCtrls.TImage gekommen. Falls ich nichts übersehen hab, ist dort aber auch keine Angabe zu den Units, die ich einbinden müsste (Immerhin erfährt man schonmal einiges, wenn man sich durch die weiterführenden Links klickt).

@himitsu: Ich hab ein kleines Spiel Programmiert, für das ich jetzt ersteinmal einen kleinen Hintergrund einfügen möchte. Bin aber noch äußerst unerfahren mit Delphi...

Danke nochmal für die Hilfe!

*EDIT* Wobei ihr auch sowieso recht hattet, wenn ich mal nicht so blöd gewesen wäre und das von Hand getippt, sondern das Timage einfach "reingezogen" hätte, hätte Delphi die Units auch von selbst eingebunden. Allerdings erhalte ich jetzt immer die Fehlermeldung "Exept EAcessViolation [...]" werde mal nachsehen, woran das liegt

implementation 27. Dez 2011 11:39

AW: Syntax-Datenbank
 
Schau mal, was vor TImage vorsteht: ExtCtrls ist die Unit ;)
Die Dokumentation ist so aufgebaut: Unitname.Typ

Mpex 27. Dez 2011 11:52

AW: Syntax-Datenbank
 
Achso! ...Tja, da hab ich malwieder richtig auf dem Schlau gestanden. Naja, das werd ich jedenfalls nicht nochmal falsch machen ;-)
Hab aber bis gerade mit der Fehlermeldung rumgespielt, aber ich komm nicht dahinter, was falsch ist. Kann mir jemand sagen, wie ich da ran gehen sollte? Also bitte nicht einfach die Lösung posten, will schon selbst draufkommen, sonst häng ich nächstes mal wieder da..

himitsu 27. Dez 2011 12:00

AW: Syntax-Datenbank
 
Zitat:

Zitat von implementation (Beitrag 1143270)
Schau mal, was vor TImage vorsteht: ExtCtrls ist die Unit ;)
Die Dokumentation ist so aufgebaut: Unitname.Typ

Das sogar mit Absicht, denn es können ja gleichnamige Typen/Funktionen/... in unterschiedlichen Units existieren und da ist ein Namespace (hier der Unitname) schon ganz praktisch, um den Typen eindeutig zu identifizieren.

Es gibt sogar einige Typen, welche in Delphi mehrfach existieren.
TPoint, TRect und DWORD findet man z.b. in den Units Types und Windows.



Wie heißt denn die Fehlermeldung genau?

PS: In diesen Delphi-Fehlerfenstern kann man Strg+C verwenden und hat dann die ganze Meldung als Text in der Zwischenablage.
Bei den Compilerfehlern kann man (hoffentlich auch in älteren Delphis) auch die Zeile markieren und Strg+C nutzen.

Mpex 27. Dez 2011 12:49

AW: Syntax-Datenbank
 
Die vollständige Fehlermeldung lautet:

---------------------------
Anwendungsfehler
---------------------------
Exception EAccessViolation in Modul Test.exe bei 0006F8EE.

Zugriffsverletzung bei Adresse 0046F8EE in Modul 'Test.exe'. Lesen von Adresse 000001A8.
---------------------------
OK
---------------------------

Hört sich für mich an, als wäre etwas beim Aufrufen der Datei falsch. Ich habe sie so aufgerufen...

Delphi-Quellcode:
...
Bild1.Picture.LoadFromFile('[C:\*Pfad*]\Bild1.bmp');
...
... da ich das im WIKI so verstanden habe, oder war das falsch?

P.S: Ich habs auch schon ohne Pfad (Da sich das Bild eh im Programmordner befindet), mit Pfad, aber in einem anderen Ordner und mit anderen Dateiformaten (z.B. Jpeg mit "Jpeg" im uses-Abschnitt) versucht, hat mich aber nicht weitergebracht

fkerber 27. Dez 2011 13:04

AW: Syntax-Datenbank
 
Hi,

und Bild1 ist auch der Name, den die Komponente auf deinem Formular jetzt trägt?
Oder bist du wieder von der "aufs Form ziehen"-Lösung weg und erstellst das TImage selbst im Quellcode? Falls ja, wäre der Code-Teil interessant.


LG, Frederic

himitsu 27. Dez 2011 13:11

AW: Syntax-Datenbank
 
Zitat:

Lesen von Adresse 000001A8.
$00000000 + Property/Feld-Offest = nil

NIL = ein Zeiger, in dem nichts drin ist

Vermutung: Du hast vergessen die Komponente zu erstellen (wie mein Vorredner auch schon vermutete)


PS: Der Dedugger sagt dir auch noch an welcher Codezeile das passiert und dort könnte man sich dann noch die Variablenwerte ansehn und schon weißt du, was da fehlt.

Mpex 27. Dez 2011 13:18

AW: Syntax-Datenbank
 
Gut, das war etwas unglücklich, hab den Namen einfach mal in BildA geändert. Und ja, zum probieren hab ich das selbst in den Quellcode geschrieben, aber da gibt es sonst noch nichts sehenswertes, ich wollte ja erstmal nur testen ob das Laden des Bildes so funktioniert. Das Testprogramm sieht so aus:

Delphi-Quellcode:
program test;
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

var
BildA: Timage;
Directory:String;


procedure wait(t: longint);   {W A R T E}
  var
    a: longint;
  begin
    a := GetTickCount;
    repeat
      Application.ProcessMessages;
    until (GetTickCount > a+t);
  end;


function Pfad: string;  {D I R E C T O R Y}
begin
  Result := ExtractFilePath(ParamStr(0));
  Directory:=Result;
end;

begin
  Pfad;
  BildA.Picture.LoadFromFile(Directory+'\Bild1.bmp');
  wait(5000);
end.
Das ist schon alles.

@Himitsu:
Debug-Ausgabe: FTH: (5836): *** Fault tolerant heap shim applied to current process. This is usually due to previous crashes. *** Prozess Test.exe (5836)
ist alles besondere, was ich sehe.. Meinst du die (5836)? Wie muss ich das denn lesen, um die Zeile zu finden?

fkerber 27. Dez 2011 13:24

AW: Syntax-Datenbank
 
Hi,

jepp, das ist das Problem - da fehlt was.

Du hast jetzt quasi gesagt, es wird da mal ein Bild geben, das wird den Namen BildA tragen, aber angelegt hast du es nicht.
Was da also fehlt ist etwas in der Art (frei aus dem Kopf, keine Garantie)
Delphi-Quellcode:
BildA := TImage.Create();
und später, wenn du es nicht mehr brauchst, musst du es auch wieder aufräumen
Delphi-Quellcode:
BildA.Free();
- aber damit wäre es dann nicht getan - du musst dem Bild mindestens mal noch nen Parent zuweisen sowie auch Größe und Position wären sinnvoll.

Vermutlich ist es einfacher, du ziehst die Komponente auf dem Formular dorthin, wo du sie haben möchtest und nennst sie BildA.


LG, Frederic

himitsu 27. Dez 2011 13:44

AW: Syntax-Datenbank
 
Du hast Application nicht initialisiert. (schau mal in eine nomale DPR, welche Delphi anlegt)

Wenn du das Bild nicht anzeigen willst, dann verwende doch TPicture oder direkt TBitmap, da du ja ein Bitmap lädst.


PS: Das mit dem globalen Directory-Parameter ist doch nicht wirklich dein Ernst?
Bzw. vorallem das mit der Pfad-Funktion. :shock:

PSSPPS: Du hast hier keine VCL-Anwendung, also kannst du auch dirtekt Delphi-Referenz durchsuchenSleep verwenden, anstatt diesem Wait.


Die 5836 ist nur die interne Fehlernummer.
Zitat:

Wie muss ich das denn lesen, um die Zeile zu finden?
In diesem Fall? (da hier sämtliche Exceptionbehandlung fehlt, welche die VCL sonst noch automatisch mitbringt)

3 Mal F7 F8 drücken und beim 4. Mal knallt es.
Also spätestens nach dem 3. Mal wirst du sehn, daß die Variable "BildA" immernoch NIL ist und demanch muß es knallen, wenn auf die Picture-Eigenschaft des nichtexistierenden Bildes zugegriffen wird.

Mpex 27. Dez 2011 13:58

AW: Syntax-Datenbank
 
Hmm, tut mir wirklich leid, aber irgendwie verstehe ich das nicht ganz - wenn ich das Bild "reinziehe", kann ich einen Pfad angeben und es funktioniert, scheibar "einfach so".
Aber wenn ich das dann in den tatsächlichen Code reingehe, um mir anzusehen, wie es richtig aussieht, steht da... nichts?! Das kann doch irgendwie nicht sein.

Also um das verständlicher zu machen: Ich habe ein neues Projekt geöffnet, ein Timage reingezogen, den Pfad ausgesucht und es ging. Bei doppelklick darauf lese ich aber nur folgenden Code:

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
    Image1: TImage;
    procedure Image1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Image1Click(Sender: TObject);
begin

end;

end.
Es muss doch irgendwo der Pfad und das .create vermerkt sein oder bin ich jetzt völlig daneben?

@himitsu: Später soll das natürlich schon angezeigt werden, das war ja nur ein test(und dann werden es auch .jpg Dateien sein). Ich komme mir irgendwie ziemlich blöd vor bei den ganzen Fehlern. Gibt es nicht ein Tutorial, das den Umgang hiermit von Grund auf erklärt, damit ich euch das hier ersparen kann?
zu PS: Wo ist denn das Problem damit?
zu PPPS: Ah! Wieder was gelernt ;-)

implementation 27. Dez 2011 14:04

AW: Syntax-Datenbank
 
Wenn du den Formulareditor benutzt, wird das Bild als Resource ins Projekt übernommen und mit in die Exe einkompilierteingelinkt. Deshalb siehst du da nirgendwo einen Pfad ;)

himitsu 27. Dez 2011 14:07

AW: Syntax-Datenbank
 
Zu deiner PAS gibt es hier noch eine DFM.

In dieser DFM-Resource steht drin, was alles auf der Form liegt und welche eigenschaften dieses hat.

Die VCL läd nun, beim Erstellen der TForm1-Instanz, diese DFM und erstellt die enthaltenen Komponenten.
Das
Delphi-Quellcode:
Image1 := TImage.Create
wird also vom VCL-Loader automatisch gemacht.

Du wolltest das TImage aber ohne den VCL-Loader nutzen und dann mußt du das TImage auch sleber erstellen und ebenfalls die nötigen Eigenschaften setzen.

PS: Wenn du über den OI ein Bild in das TImage lädst, dann wird das Bild zu diesem Zeitpunkt in die Kompoente geladen und dann direkt in der DFM gespeichert.
Beim Laden der Form kommt dann das Bild aus der DFM und die externe Datei wird nicht mehr benötigt.



PSS: Rechtsklick auf die Form und "Ansicht als Text". (oder direkt in die .DFM reinsehn, wenn diese im Textformat gespeichert wurde, dann sieht man auch etwas)

Mpex 27. Dez 2011 14:11

AW: Syntax-Datenbank
 
Kopf -> Tisch ...

Okay, aber das Bild möchte ich in ein Programm einfügen, dass ohne Formulare etc. erstellt wurde, also muss ich entweder das gesamte Programm umstellen (Was ein riesenhaufen Arbeit wäre, abgesehen davon, dass ich mich garnicht sogut damit auskenne, als das ich mir das zutrauen würde) oder das Bild anpassen. Aber wie krieg ich jetzt den korrekten Umgang mit Timage raus (Am besten ohne mir alles von euch vorsagen zu lassen :P)?

P.S: Vielen Dank übrigens für eure Geduld mit mir. Ich gebe mir wirklich Mühe, mitzukommen und möglichst selbst drauf zu kommen, bin aber eben noch sehr unerfahren mit Delphi.

*Edit* Entschuldigung, dein PSS(...) hatte ich nicht gesehen ([OT] Warum eigentlich PSS? [/OT]). Damit kommen wir der Sache ja schon etwas näher. Allerdings steht da auch nicht der Pfad, sondern nur die Bildinformation, die aus einem gigantischem Zahlen/Buchstaben-Salat besteht.

himitsu 27. Dez 2011 14:21

AW: Syntax-Datenbank
 
Zitat:

Zitat von Mpex (Beitrag 1143317)
Aber wie krieg ich jetzt den korrekten Umgang mit Timage raus (Am besten ohne mir alles von euch vorsagen zu lassen :P)?

Tipp: In meinem letzen Post versteckte sich ein Stückchen Quellcode.
(in der OH steht auch was für Parameter dort nötig sind > Delphi-Referenz durchsuchenTImage.Create ... Tipp: NIL)

Zitat:

Zitat von Mpex (Beitrag 1143317)
Allerdings steht da auch nicht der Pfad, sondern nur die Bildinformation, die aus einem gigantischem Zahlen/Buchstaben-Salat besteht.

Wie gesagt, den Pfad gibt es dort nicht, da dort direkt das Bild drin ist ... schön kodiert, damit es als Text reinpaßt. (Binärdaten in einer Textdatei sind nicht sonderlich praktisch :zwinker: )

Mpex 27. Dez 2011 16:04

AW: Syntax-Datenbank
 
Soweit bin ich mit der Suche schon selbst gekommen, nur gebracht hatt es mir leider nichts ;) Das Problem ist, dass ich die Parametereingabe nicht verstehe - und wenn ich mir den Text zu Owner und die weiterführenden durchlese, wird es nur noch schlimmer. Es soll kein Objekt für die Freigabe usw. zuständig sein, das Bild soll einfach nur zu einer voher im Programm festgelegten Zeit aufgerufen, angezeigt und je nach Programmverlauf(Der ist aber auch schon festgelegt) verschoben oder verändert werden. Was ich suchte war im Prinzip also
"...ZeigeBild1(Position)...VerschiebeBild1(NeuePos ition)...ZeigeBild2..." usw.

Und zum zweiten: Meinst du damit, ich soll alle Bilder (Das wären so um die 100)in dieser Form in mein Programm Kopieren? Dann hab ich ja Seitenweise Buchstabensalat im Quellcode.. geht das nicht anders?

jaenicke 27. Dez 2011 16:41

AW: Syntax-Datenbank
 
Wie willst du denn ein Bild anzeigen, wenn du gar kein Formular hast? Mir ist nicht klar was du da eigentlich machen willst...

Auf jeden Fall kannst du mit den non-visuellen Komponenten arbeiten, wenn du nichts anzeigen willst. TBitmap, TJpegImage, TPngImage usw. wären das. Aber das hat himitsu ja auch schon geschrieben.

Oder willst du nur mit den Dateien an sich arbeiten? Dann kannst du dir das ganz sparen und nur z.B. MoveFile usw. nutzen.

Mpex 27. Dez 2011 19:56

AW: Syntax-Datenbank
 
Nein, ich hab nur keine Formulare, weil ich noch Schüler bin und wir im Infounterricht mit so einer komischen Unit arbeiten, in der das alles etwas anders ist...Das Programm ist zwar nicht für den Infounterricht, sonst könnte ich ja einfach meinen Lehrer fragen, aber ich möchte in dem "stil" weiterarbeiten, damit ich lerne, so zu programmieren

himitsu 27. Dez 2011 20:19

AW: Syntax-Datenbank
 
Zitat:

Zitat von Mpex (Beitrag 1143369)
damit ich lerne, so zu programmieren

Ich hoffe das ist nur, damit du im Unterricht besser wirst ... ansonsten würde ich sagen >>>Bist du Irre? Mach es lieber "richtig".<<<

Mpex 27. Dez 2011 20:44

AW: Syntax-Datenbank
 
Ich will einfach nicht aufs Spiel setzen, dass ich dann nachher in einem Test oder so durcheinanderkomme. Habt ihr denn einen Vorschlag, wie ich das machen könnte?

Sir Rufo 27. Dez 2011 20:52

AW: Syntax-Datenbank
 
Die Klasse TImage ist dazu da ein Bitmap auf einem VCL-Formular anzuzeigen.

Du hast kein VCL-Formular, also geht das schon mal nicht.

In einer Konsolenanwendung ein Bitmap anzuzeigen ist allerdings auch nicht einfach, es sei denn du willst direkt in die Königsklasse der Non-VCL Programmierung (also direkt am Windows-API Herzen) einsteigen.
(Allerdings erzeugst du dir da auch ein Formular=Fenster=Window)

implementation 27. Dez 2011 21:05

AW: Syntax-Datenbank
 
Zitat:

Zitat von Mpex (Beitrag 1143317)
[OT] Warum eigentlich PSS? [/OT]

Eigentlich heißt es PPS *klugscheiß*
PS = Post Scriptum = nach dem geschriebenen
PPS = Post Post Scriptum = nach dem nach dem geschriebenen
PPPS = Post Post Post Scriptum = nach dem nach dem nach dem geschriebenen

Mpex 27. Dez 2011 21:08

AW: Syntax-Datenbank
 
@ Sir Rufo: Gut, das ist logisch :) Aber wenn ich mein Programm mit ein paar Bildern aufhübschen möchte, wie soll ich das denn dann machen?
@ Implementation : Genau das meinte ich :P

Sir Rufo 27. Dez 2011 22:16

AW: Syntax-Datenbank
 
Die Konsole (DOS-Fenster, Eingabeaufforderung) ist reiner Text-Modus.

Hast du ein Konsolenprogramm, dann kannst du das erstmal abhaken.

Dafür wurde das GUI (Graphical User Interface) geschaffen, wo man in einem Fenster=Window=Form Grafiken (dann mit TImage) anzeigen lassen kann.

VkPenguin 27. Dez 2011 23:53

AW: Syntax-Datenbank
 
Tja, das ist schade. Hätte ich auch gerne gewusst. Aber man kann so doch auch zeichnen, im Prinzip sind das doch Grafiken oder nicht? Meine Kreise zeichne ich im Prinzip doch auch so.

Sir Rufo 28. Dez 2011 00:48

AW: Syntax-Datenbank
 
Zitat:

Zitat von VkPenguin (Beitrag 1143401)
Meine Kreise zeichne ich im Prinzip doch auch so.

ist das so? Zeig doch mal die Codezeile mit der der Kreis gezeichnet wird.

VkPenguin 28. Dez 2011 11:30

AW: Syntax-Datenbank
 
Das wird nicht viel Helfen, da ich ja mit dieser Unit arbeiten muss, obwohl das in diesem Fall ja auch sein könnte. Wenn ich einen Kreis zeichnen will, funktioniert das so:
Delphi-Quellcode:
Stiftname.zeichneKreis(Radius);

fkerber 28. Dez 2011 13:38

AW: Syntax-Datenbank
 
Hi,

ist das diese komische Stift-Maus-Irgendwas-Geschichte?


LG, Frederic

himitsu 28. Dez 2011 13:43

AW: Syntax-Datenbank
 
Ja.

SuM (Stifte und Mäuse)
http://www.schule.de/schulen/oszhdl/...sum-kritik.htm
http://www.krumwiede.de/Informatik/SumJava/start.html

fkerber 28. Dez 2011 13:49

AW: Syntax-Datenbank
 
Hi,

dann sieht es glaube ich schlecht aus - soweit ich weiß gibt es da kein TImage und auch kein Äquivalent dafür...

LG, Frederic

himitsu 28. Dez 2011 14:01

AW: Syntax-Datenbank
 
Indirekt schon.

Man erstellt sich soeine kranke TBild-Klasse und malt mit einem Stift jedes Pixel einzeln auf die Leinwand drauf.

Mpex 28. Dez 2011 17:53

AW: Syntax-Datenbank
 
Ja, sowas ähnliches benutze ich auch.. Msum und Mliste heißt es, wurde aber in unserer Schule etwas abgeändert. Im Grunde ist es aber das. Irgendwie regt sich jeder, aber wirklich jeder Informatiker, dem ich davon erzähle drüber auf :P Naja.

@Himitsu: Meinst du denn, das wäre mit dieser Klasse machbar? Es geht ja um mehrere Bilder, die sich dann auch noch bewegen sollen - ich kenn den Befehl ja nicht, aber es hört sich sehr unpraktisch an. Werde es aber so oder so mal ausprobieren. Melde mich demnächst mal und sage, ob es funktioniert hat.


Falls das erst nächstes Jahr sein sollte: Guten Rutsch euch allen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 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