![]() |
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! |
AW: Syntax-Datenbank
In der
![]() |
AW: Syntax-Datenbank
Wie/wo willst du das
![]() Als VCL-Komponente pappt man das einfach von der Tool-Palette auf die Form und Delphi bindet automatisch die nötige Unit ein. Zitat:
F1 > OH |
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.
|
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 ![]() @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 |
AW: Syntax-Datenbank
Schau mal, was vor TImage vorsteht: ExtCtrls ist die Unit ;)
Die Dokumentation ist so aufgebaut: Unitname.Typ |
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.. |
AW: Syntax-Datenbank
Zitat:
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. |
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:
... da ich das im
...
Bild1.Picture.LoadFromFile('[C:\*Pfad*]\Bild1.bmp'); ... ![]() 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 |
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 |
AW: Syntax-Datenbank
Zitat:
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. |
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:
Das ist schon alles.
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. @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? |
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:
und später, wenn du es nicht mehr brauchst, musst du es auch wieder aufräumen
BildA := TImage.Create();
Delphi-Quellcode:
- 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.
BildA.Free();
Vermutlich ist es einfacher, du ziehst die Komponente auf dem Formular dorthin, wo du sie haben möchtest und nennst sie BildA. LG, Frederic |
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 ![]() Die 5836 ist nur die interne Fehlernummer. Zitat:
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. |
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:
Es muss doch irgendwo der Pfad und das .create vermerkt sein oder bin ich jetzt völlig daneben?
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. @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 ;-) |
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 ;)
|
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:
wird also vom VCL-Loader automatisch gemacht.
Image1 := TImage.Create
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) |
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. |
AW: Syntax-Datenbank
Zitat:
(in der OH steht auch was für Parameter dort nötig sind > ![]() Zitat:
|
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? |
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. |
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
|
AW: Syntax-Datenbank
Zitat:
|
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?
|
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) |
AW: Syntax-Datenbank
Zitat:
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 |
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 |
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. |
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
![]() |
AW: Syntax-Datenbank
Zitat:
|
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);
|
AW: Syntax-Datenbank
Hi,
ist das diese komische Stift-Maus-Irgendwas-Geschichte? LG, Frederic |
AW: Syntax-Datenbank
Ja.
SuM (Stifte und Mäuse) ![]() ![]() |
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 |
AW: Syntax-Datenbank
Indirekt schon.
Man erstellt sich soeine kranke TBild-Klasse und malt mit einem Stift jedes Pixel einzeln auf die Leinwand drauf. |
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 05:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz