Zum Inhalt springen

aLeXanDer..

Mitglieder
  • Gesamte Inhalte

    192
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von aLeXanDer..

  1. Unglaublich... Danke, hab ich glatt vergessen. Danke!
  2. Hallo Community, Ich habe folgendes Problem. Ich habe mir ein eigenes Objekt von einer TScrollBox abgeleitet, die ich gerne als Basisklasse für meine weiteren Objekte die ich erstellen will hernehme will. In dieser Klasse sind also so Routinen wie MouseMove(Verschieben und Skalieren des Objekts) definiert. Nun auf das Objekt wird ein TImage gelegt. Und nun habe ich das Problem das in meinem abgeleiteten Objekt das von meinem Basisobjekt abgeleitet ist (Ich hoffe das ist noch verständlich) ein Bild auf das Image gezeichnet werd. Nun sollte das Bild aber auch neu gezeichnet werde wenn der User skaliert. Aber das geht nicht, da das Programm nicht in die Neu zeichenroutine reinläuft, obwohl ich die Variable dafür abfrage. Hier der MouseMove und alles was dazu gehört aus der BASISKLasse __fastcall TBasis::TBasis(TComponent* Owner):TScrollBox(Owner) { Parent = (TWinControl*)Owner; Left = 0; Top = 0; Height = 50; Width = 50; FBreite = 50; FHoehe = 50; Constraints->MinHeight = 30; Constraints->MinWidth = 30; TimerBlinker = new TTimer(this); Img = new TImage(this); Img->Parent = this; Img->Visible = true; Img->OnMouseDown = MyMouseDown; Img->OnMouseMove = MyMouseMove; Img->OnMouseUp = MyMouseUp; Img->OnMouseLeave = MyMouseLeave; ... oid __fastcall TBasis::MyMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (!Shift.Contains(ssLeft) && X > Width -10 && Y > Height -10) { Screen->Cursor = crSizeNWSE; return; } else if (!Shift.Contains(ssLeft)) { Screen->Cursor = crDefault; return; } if (Moving) { Left = Left + X - AltX; if (Left < 0) Left = 0; Top = Top + Y - AltY; if (Top < 0) Top = 0; if (Left + Width > Parent->ClientWidth) Left = Parent->ClientWidth - Width; if (Top + Height > Parent->ClientHeight) Top = Parent->ClientHeight - Height; } if (Sizing) { Width = Width + X - AltX; if (Left + Width > Parent->ClientWidth) Width = Parent->ClientWidth - Left; Img->Picture->Bitmap->Width = Width; AltX = X; Height = Height + Y - AltY; if (Top + Height > Parent->ClientHeight) Height = Parent->ClientHeight - Top; Img->Picture->Bitmap->Height = Height; AltY = Y; FBreite = Width; FHoehe = Height; } } Und nun das abgeleitet Objekt wo ich die eigentlich Funktion abändere void __fastcall TZweiRegelVentil::MyMouseMove(TObject *Sender, //Im Konstruktor OnMouseMove = MyMouseMove; ... TShiftState Shift, int X, int Y) { TBasis::MyMouseMove(Sender, Shift, X, Y); if (Sizing) xxxZeichnen(); //NeuZeichnenroutine } Ist in dem Aufruf was falsch? Oder Kann ich irgendwie anders diese ZeichenRoutine aufrufen? Gruß Alex
  3. Hallo, Folgendes, ich möchte gerne ein animiertes GIF auf meiner Form darstellen Habe C++ Builder 2007 von codeGear Hier gibts schon eine Klasse TGIFimg und im Netz findet man auch Beispiele, jedoch kein funktionierendes ein bewegliches also animiertes GIF Mit Code wie : TGIFImage *gif = new TGIFImage(); gif->LoadFromFile(sample.gif'); Image1.Picture.Assign(gif); erhält man nur ein Standbild, oder bzw. nur das erste Bild des Gifs- Hat sich jemand schon intensiver mit dieser Komponente Klasse auseindergesetzt und kann mir helfen? Danke Alex
  4. War bei mir genauso, ich hatte die Stelle zur ausbildung und dann kam der schrieb zur Musterung, Ich hab erstmal den mir zugeteilten ähmm Beamten angerufen und gefragt, was ich machen soll. Dieser hat mir geraten einen Brief an das Kreiswehrersatzamt zu schreiben mit dem Anliegen auf Zurückstellung, hab ich dann auch gemacht. Musste trotzdem zur Musterung. Wurde ausgemustert. alx
  5. Wenn ich das ganze nicht als Winapi mache sondern ne ganz normale VCL-Anwendung mit Formular erhalte ich keine Fehler
  6. Ich glaube wir meinen beide dasselbe aber reden trotzdem aneinander vorbei. Also ich habe ja bei all diesen Optionen den Haken entfernt, also deaktiviert. Aber dann erhalte ich ja die Linker-Fehlermeldungen. Das Programm lässt sich nicht Compilieren. Mit dem Haken bei der Option "Laufzeit-Packages verwenden", also Haken nicht entfernt, compiliert das Programm, aber man benötigt auf dem Fremdrechner die DLLs, was ich aber nicht will. Ich hoffe jetzt ist das Problem eindeutig.
  7. Ich dachte das man alle diese Optionen "deaktivieren" muss um eine .exe zu kompilieren, die auf einem Rechner ohne jedliche dlls läuft.
  8. Komm vom Dorf da tut man schon mal haken und hacken verwechseln Und es ist leider andersrum. Compilieren mit der Option Packages: Laufzeit-Packages verwenden und Haken gesetzt , funktioniert. Laufzeit-Packages verwenden und Haken nicht gesetzt , Fehlermeldungen. [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiInit(Bde::DBIEnv *)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ
  9. Das ich am Code nix ändern muss, ist mir klar, da ja das Programm einwandfrei compiliert, wenn man die Eigenschaften wie -> Optionen ->C++ Compiler -> Debbuging Hacken entfernen bei : - Debug-Informationen - Zeilennummer für das Debuggen ->Linker -> Linken Hacken entfernen bei : - Dynamische RTL - Vollständige Debug-Informationen ->Packages Hacken entfernen bei : - Laufzeit-Packages verwenden abändert. Also fehlt aber dennoch ein Include, oder lieg ich falsch? rauszufinden gilt welcher?!
  10. Hallo community Ich habe eine Programm das mit folgendem code den NetDir-Pfad in der BDE ändert und fest speichert. //--------------------------------------------------------------------------- #include <vcl.h> #include <windows.h> #pragma hdrstop #include <Bde.hpp> //--------------------------------------------------------------------------- #pragma argsused WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //Parameter char *ptr; int pos; AnsiString Parameter = ""; // übergebene Parameter holen ptr = GetCommandLine(); if (ptr != NULL) { Parameter = ptr; pos = Parameter.Pos("/"); Parameter = Parameter.Delete(1,pos); } //AnsiString Pfad = GetCurrentDir(); AnsiString Pfad = Parameter; const char *Adresse = Pfad.c_str(); try { if(DbiInit(NULL) == DBIERR_NONE) { hDBICur hCur = NULL; if(DbiOpenCfgInfoList(NULL, dbiREADWRITE, cfgPersistent, "\\DRIVERS\\PARADOX\\INIT", hCur) == DBIERR_NONE) { if(DbiSetToBegin(hCur) == DBIERR_NONE) { CFGDesc Config; for(; // for ever { if(DbiGetNextRecord(hCur, dbiWRITELOCK, &Config, NULL) != DBIERR_NONE) break; if(strcmpi(Config.szNodeName, "NET DIR") == 0) { strcpy(Config.szValue, Adresse); DbiModifyRecord(hCur, &Config, true); break; } } } } DbiExit(); } } catch(...) { return 1; } return 0; } [/code] Ich möchte, das das Programm auf jedem Rechner läuft ohne das ich die BPLs usw. in dem Verzeichnis brauche. Also wollte ich das Programm so compilieren das es ohne diese läuft. Also ohne Lauzeitpackages usw. Nun erhalte ich folgende Fehler [code] [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiInit(Bde::DBIEnv *)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiOpenCfgInfoList(Bde::_hDBIObj *, Bde::DBIOpenMode, Bde::CFGMode, char *, Bde::_hDBIObj *&)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__stdcall Bde::DbiSetToBegin(Bde::_hDBIObj *)' referenziert von E:\BORLAND2007 PROJEKTE\FIRMA\BDE NETDIR SETZEN MIT INSTALLAWARE\DEBUG\FILE1.OBJ ...usw... Ich hab ein bisschen rumgesucht und rausgefunden das viele eine IDAPI.h miteinbinden. Diese habe ich selbst nicht auf dem Rechner gehabt. Ich hab sie aber im Internet gefunden. Nun wenn ich diese mit einbinde und die BDE.hpp ebenso erhalte ich eine vielzahl von doppeldeutigkeiten. [BCC32 Fehler] idapi.h(186): E2015 Mehrdeutigkeit zwischen 'DBIDATE' und 'Bde::DBIDATE' [BCC32 Fehler] idapi.h(187): E2015 Mehrdeutigkeit zwischen 'TIME' und 'Bde::TIME' ...usw... Und wenn ich nur die IDAPI.h ohne BDE.hpp include erhalte ich fehler wie [BCC32 Fehler] File1.cpp(45): E2034 Konvertierung von 'unsigned long' nach 'unsigned long *' nicht möglich [BCC32 Fehler] File1.cpp(45): E2342 Keine Übereinstimmung des Typs beim Parameter 'phCur' ('unsigned long *' erwartet, 'unsigned long' erhalten) ...usw... Hat jemand eine Idee was ich verkehrt mache? Danke Alex
  11. Hallo Ich versuche mit dem bei Borland mitgelieferten Programm InstallAware 6 Express ein Setup zu erstellen. Da ich mit dem Setup auch die BDE mit installieren will. Habe ich mir das BDE MergeModul runtergeladen und mit eingebunden. Dieser installiert die BDE bei der Installation meines Programms. Jedoch möchte ich ihm sagen das der Paradox/Native Pfad Auf das Installationsverzeichnis in einen bestimmten Ordner zeigen soll und nicht wie Standartmäßig auf C:\ . Habe bde_prerequisite.zip runtergeladen und in InstalleAware/runtimes kopiert. Hier erhalte ich jedoch beim "kompilieren" des Setups eine Warnung, bzw Fehler : InstallAware File Bag Plug-In No files matching wildcard pattern <replace with your path to Borland Database engine 5.2 setup files> Ich weiß aber gar nicht ob ich das bde_prerequisite.zip überhaupt brauche. Oder ob ich bei dem Installaware in dem Data-Verzeichnis , wo dann der Odner BDE/Borland Shared/.. die Dateien der BDE liegen etwas in der idapi32.cfg ändern muss. Hat schon irgendjemand Erfahrung mit dem InstallAware und der BDE gemacht? Ein paar Erläuterungen wären weltklasse Alex
  12. Ja und nun ? Auf was willst du hinaus?
  13. naja ich hatte immerhin ein drittel der Kosten schon vorgesehn =P
  14. Dein monatliches Gehalt durch 4*mal deine Wöchentlichen Arbeitsstunden Oder liege ich da falsch?
  15. Jetzt ärger ich mich das ich da nicht selber drauf gekommen bin. Danke für die Hilfe. funktioniert perfekt alex
  16. Noch eine Frage. Das mit dem berechnen funktioniert wunderbar. sofern der Winkel 180° beträgt. Was ist aber wenn ich jetzt Sowas wie eine Art Tacho zeichne und das Maximum nicht bei 0° und das Minimum nicht bei 180° liegen sondern bei z.B 10° und 170° wie stelle ich dann die Berechnungen an? Danke Alex
  17. Bin nun soweit, das ich einfache Komponenten wie ein Button auch skalieren kann mit void __fastcall TForm1::ScaleControl(TControl* pControl) { // versuchen den Komponentenzeiger in TWinControl (Zeiger auf ein // fensterorientiertes Steuerelement) umzucasten: TWinControl* pWinControl = dynamic_cast<TWinControl*>(pControl); // falls Umwandlung erfolgreich (Steuerelement fensterorientiert) if(pWinControl) { // "Skalieren"-Modus für das Steuerlement aktivieren: ReleaseCapture(); pWinControl->Perform(WM_SYSCOMMAND, SC_SIZE+HTMENU, 0); } // Falls ein NICHTfensterorientierte Komponente // verschoben werden soll: else if(pControl) { // Hilfspanel entsprechend der Position und // Grösse der Komponente ausrichten: pHelpPanel->Parent = pControl->Parent; pHelpPanel->Left = pControl->Left; pHelpPanel->Top = pControl->Top; pHelpPanel->Width = pControl->Width; pHelpPanel->Height = pControl->Height; // Das zu verschiebende Steuerelement auf // dem Hilfspanel platzieren: TWinControl* pSaveParent = pControl->Parent; pControl->Parent = pHelpPanel; pControl->Left = 0; pControl->Top = 0; pHelpPanel->Visible = true; Application->ProcessMessages(); // "Verschieben"-Modus für das Hilfspanel aktivieren: ReleaseCapture(); pHelpPanel->Perform(WM_SYSCOMMAND, SC_SIZE+HTMENU, 0); // Nach dem Verschieben das Steuerelement an der // Zielposition auf dem Formular platzieren: pControl->Parent = pSaveParent; // this = Zeiger auf die frmMain //pControl->Left = pHelpPanel->Left; //pControl->Top = pHelpPanel->Top; pControl->Height = pHelpPanel->Height; pControl->Width = pHelpPanel->Width; pControl->ClientHeight = pControl->Height; pControl->ClientWidth = pControl->Width; //TBreite = pControl->Width; //THoehe = pControl->Height; //PosT = pHelpPanel->Top; pHelpPanel->Visible = false; // Hilfspanel ausblenden } Skalieren = false; Skalieren1->Checked = false; Verschieben1->Enabled = true; } also nur SC_Move in SIZE abgeändert und statt HTCAPTION, HTMENU Nur wenn sich jetzt auf einem Panel eine untergeordnete Komponente z.B. ein TImage befindet, gleicht er dessen größe nicht mit an. Wie kann man das Realisieren? Ich hab es schon mit pWinControl->ClientHeight = ... probiert, nur da ich ja ein Hilfspanel zeichne, wird damit dann die eigentliche Komponente angesprochen und nicht der Client, das Image, das drauf liegt. Und das dann anzusprechen gelingt mir nicht. alex
  18. Hallo Community. Ich möchte gerne in meinem Programm. Komponenten auf dem Formular zur Laufzeit durch den Benutzer verschieben und skalieren lassen. zum verschieben habe ich schon eine Routine. Man legt ein Hilfspanel an: void __fastcall TForm1::FormShow(TObject *Sender) { pHelpPanel = new TPanel(this); pHelpPanel->Parent = this; pHelpPanel->BorderStyle = bsNone; pHelpPanel->BevelInner = bvNone; pHelpPanel->BevelOuter = bvNone; pHelpPanel->Caption = ""; pHelpPanel->FullRepaint = false; pHelpPanel->Visible = false; // eigene Botschaftsbehandlungsroutine der Application zuweisen Application->OnMessage = OnAppMessage; } Aufruf der Application Methode: void __fastcall TForm1::OnAppMessage(tagMSG &Message, bool &Handled) { // nur falls die linke Maustaste gedrückt wurde: if(Message.message == WM_LBUTTONDOWN) { // Zeiger auf das Steuerelement unter dem Mauscursor besorgen: TControl * pControl = ControlAtPos(ScreenToClient( Message.pt), false, true); // Falls das Steuerelement weitere untergeordnete Elemente // beinhaltet, prüfen ob nicht eines davon verschoben werden soll: if(pControl) { TWinControl* pCmp = dynamic_cast<TWinControl*>(pControl); TControl* pCtrl; while(pCmp) { pCtrl = dynamic_cast<TControl*>(pCmp->ControlAtPos(pCmp-> ScreenToClient(Message.pt), false, true)); pCmp = dynamic_cast<TWinControl*>(pCtrl); if(pCmp) pControl = pCmp; else if(pCtrl) pControl = pCtrl; } } // Control verschieben: MoveControl(pControl); Handled = true; } } und die Methode Move Control // Funktion fürs Verschieben der Steuerelemente mit der Maus //--------------------------------------------------------------------------- void __fastcall TForm1::MoveControl(TControl* pControl) { // versuchen den Komponentenzeiger in TWinControl (Zeiger auf ein // fensterorientiertes Steuerelement) umzucasten: TWinControl* pWinControl = dynamic_cast<TWinControl*>(pControl); // falls Umwandlung erfolgreich (Steuerelement fensterorientiert) if(pWinControl) { // "Verschieben"-Modus für das Steuerlement aktivieren: ReleaseCapture(); pWinControl->Perform(WM_SYSCOMMAND, SC_MOVE+HTCAPTION, 0); } // Falls ein NICHTfensterorientierte Komponente // verschoben werden soll: else if(pControl) { // Hilfspanel entsprechend der Position und // Grösse der Komponente ausrichten: pHelpPanel->Parent = pControl->Parent; pHelpPanel->Left = pControl->Left; pHelpPanel->Top = pControl->Top; pHelpPanel->Width = pControl->Width; pHelpPanel->Height = pControl->Height; // Das zu verschiebende Steuerelement auf // dem Hilfspanel platzieren: TWinControl* pSaveParent = pControl->Parent; pControl->Parent = pHelpPanel; pControl->Left = 0; pControl->Top = 0; pHelpPanel->Visible = true; Application->ProcessMessages(); // "Verschieben"-Modus für das Hilfspanel aktivieren: ReleaseCapture(); pHelpPanel->Perform(WM_SYSCOMMAND, SC_MOVE+HTCAPTION, 0); // Nach dem Verschieben das Steuerelement an der // Zielposition auf dem Formular platzieren: pControl->Parent = pSaveParent; // this = Zeiger auf die frmMain pControl->Left = pHelpPanel->Left; pControl->Top = pHelpPanel->Top; pHelpPanel->Visible = false; // Hilfspanel ausblenden } } Damit können alle Komponenten auf dem formular zur Laufzeit verschoben werden. Meine Frage, wie kann ich dasselbe mit skalieren sicherstellen? z.B , wenn der Benutzer in die rechte untere Ecke der Komponente geht, er es vergrößern oder verkleinern kann. Anstelle von SC_Move --> SC_SiZE //EDIT bringt schon den Unterschied das er die Größe anzeigt wie man skalieren will aber er ändert es iwie nicht richtig ab. bzw. gar nicht. Ich hab auch schon mit MouseDown und Up rumgespielt. jedoch ist das alles sehr ungenau und der Benutzer sieht nicht wie groß oder klein er die Komponente zieht. Hat jemand schon Erfahrungen damit gemacht? Danke Alex
  19. Jetzt kann ich selbst auch was dazu schreiben. Bei mir gabs neulich ne Gratifikation für besondere Leistungen im Betrieb. Sowas finde ich wahnsinnig motivierend sich noch mehr reinzuhängen
  20. Danke für die Hilfe mit dem Bogenmaß klappts nun einwandfrei
  21. Achso Danke =) dann nützt es mir nichts Ich brauche ja die Koordinaten eines Punktes auf dem Kreisbogen. Und die kenn ich nicht. Also kenn ich auch kein Bogenmaß.
  22. Ein bisschen hat mir das weitergeholfen. aber der x-Wert stimmt nicht. y-Wert najaa kann euch mal mein rechenbeispiel geben Wert in Grad umrechnen 180° weil ich nur nen halben Kreis habe. Multiplikator = 180°/ DifferenzvonMaxnachMin; Ergebnis = (Wert - Minimum) * Multiplikator; int x,y; x = (X-MittelpunktKreis) + ((Radius) * cos(Ergebnis)); y = (Y-Mittelpunktkreis) + ((Radius) * sin(Ergebnis)); Iwie klappts nicht alex
  23. Hallo ich habe ein denke ich mal mathematisches Problem. C++ Borland Builder 2007 Ich zeichne einen Halbkreis mit Canvas->Pie und das soll als Temperaturanzeige gelten wenns zu warm is geht der Zeiger nach Rechts wenns zu kalt ist nach links ansonsten steht er dementsprechend senkrecht nach oben =) Nun ich hab das Probelm das ich nicht weiß wie die Pixel auf der Kreisbahn zu berechnen sind. Wenn ich einen Kreis hab und die Temperatur ist genau optimal dann sind die Koordinaten Canvas->LineTo(X-Koordinate = Mittelpunkt, Y-Koordinate = Radius) Nun wie bekomme ich aber die Koordinaten wenn die Temperatur zwischen zu heiß und optimal liegt. ? Dann ändert sich ja x und y wert dementsprechen. Ich hoffe ich hab mich nicht zu unverständlich ausgedrückt. Ich brauche praktisch Den x und Y Weert für eine bestimmte GradZahl auf dem Kreisradius. Danke alex
  24. selsbt geschafft Zeit->OnTimer = Timer1Timer; void __fastcall Label::Timer1Timer(TObject *Sender) { Visible = !Visible; }

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...