Zum Inhalt springen

paule22

Mitglieder
  • Gesamte Inhalte

    190
  • Benutzer seit

  • Letzter Besuch

Beiträge von paule22

  1. Hallo,

    suche nach einer Möglichkeit, den Code für __alloca, __main __argv in source Form in naswm.exe (netwide assembler) zu verwandeln und anzuwenden.

    Wer Ideen hat, bitte schreiben.

    Grund des Anliegens:

    mit alink.exe obj Dateien unter Windows linken, ohne das GCC System auf den Computersystem zu verwalten.

    Bis jetzt crasht das Programm immer, wenn ich mit alink.exe linke.

    Könnte daher zusammenhängen, das die verwendeten C++ Klassen noch nicht initialisiert sind.

    Gruß

    pauel22

  2. Hallo Perfiliev!

    unter:

    RapidShare: Easy Filehosting

    habe ich eine abgeänderte Yacc-Datei hochgeladen.

    Ich habe alle möglichen Varianten

    + num = num

    + num = exp

    + exp = num

    + exp = exp

    primitiv programmiert.

    Klappt auch so weit gut mit

    
    var1 = 10.3
    
    var2 = 2.1
    
    
    if var1 = var2 ...
    
    
    allerdings tritt jetzt das ein Problem auf, wenn ich:
    
    var0 = 1.2
    
    var1 = 10.2
    
    var3 = 1.1 + var0      // <-- hier
    
    
    if var3 = ....-
    
    

    dann wird das AssemblerFile derart verstopft ...

    kannst Du mal nachschauen und ggf. eine Lösung posten?

    Vielen Dank

    Jens

  3. Hallo Perfiliev,

    vielleicht sollte ich etwas zu dem Projekt sagen ...

    Es handelt sich hierbei wohl eher um einen Skript-Compiler. Das hört sich jetzt vielleicht lustig an, ist aber so :-)

    Der Kern des Compilers wurde von mir in Delphi 7 gestartet/programmiert.

    Mittlerweile wird das Projekt unter Windows Vista und CodeGear (Delphi 2009)

    weiter entwickelt, da es zu Problemen mit Delphi 7 unter Vista (Kompatibilität) gab.

    Unter dem WebLink: TP Lex/Yacc

    kann man die tply41a.zip downloaden (Yacc für Pascal)

    So als Grundlage für den Compiler dient der nopaste code vom letztem Posting.

    Yacc ist ja Stack basierend, vielleicht hier die kleine Unmissverständlichkeit.

    Der ParserCode erzeugt aus einer Quelldatei NASM (Netwide Assembler) Win32 Code. NASM verwende ich dann um den ASM-Text/Ausgabe in Win32 obj binary umzuwandeln. Dieser obj Code ist kompatibel mit den MingW32 GCC Compiler. Deshalb auch meine Wahl des Assemblers.

    Mittels selbst geschriebener Lib's (ausser Qt 4.3.4) werden dann die Daten gegeneinander zu einer EXE Datei gelinkt.

    Eine BATCH Datei würde dann so aussehen:

    
    set path=i:\mingw\bin;i:\qt\4.3.4\bin;%path%
    
    nasm -f win32 11.asm
    
    g++ -o 11.exe 11.obj -Li:\Qt\4.3.4\lib -L.\lib -lkalib -lkagraph -lxbase -lkernel32 -lwin32k -lQtCore4 -lqtmain -lQtGui4
    
    
    Nun zu den cmp Funktionen: Dazu dient ein Ausschnitt aus der Datei jk_class.cc:
    
    ...
    
    float ErgebnisWert = 0.0;
    
    
    float vglwertA1 = 0;
    
    float vglwertA2 = 0;
    
    extern "C" void set_vergleichswert_A1(int nach, int vor) { vglwertA1 = QString("%1.%2").arg(vor).arg(nach).toFloat(); }
    
    extern "C" void set_vergleichswert_A2(int nach, int vor) { vglwertA2 = QString("%1.%2").arg(vor).arg(nach).toFloat(); }
    
    
    // die folgende Funktion muss noch angepasst werden
    
    // Sie steht nur exemplarisch (erstmal) hier aufgelistet ...
    
    extern "C" void set_vergleichswert_byvar(float v1, float v2)
    
    {
    
      vglwertA1 = v1;
    
      vglwertA2 = v2;
    
    }
    
    
    extern "C" int vergleiche_cmpeq(void)
    
    {
    
      if (vglwertA1 == vglwertA2)
    
      return 1; else
    
      return 0;
    
    }
    
    ...
    
    
    Zu Deiner Frage mit (siehe obigen Code _exemplarisch_),
    Wenn es C-call ist, dann braucht man zwei PUSHs bevor.
    ja das ist richtig, aber das ist das wenigste Problem (erstmal). _vergleiche_cmpeq hat wie im Code oben zu sehen ist kein Argument. Zu den CodeAbschnitt Je0: call _vergleiche_cmpeq hier handelt es sich um eine NichtOptimierter Codestelle. Es wird halt nochmals auf "=" (Gleichheit) geprüft - der Compiler in seiner jetzigen Form ist halt noch ein recht dummy/dummer Automat, der keinen optimierten Code auswirft. So das dazu erstmal. Nun zum eigentlichem Problem: Das Programm YACC (so scheint es mir) ist ein STACK/(Keller) (YetAnother) Compiler-Compiler Tool. Doch warum verhält sich dieses Tool so merkwürdig? Beispiel:
    
    zahl : NUMMER_TOKEN
    
      ;
    
    
    t_var : /* kann leer bleiben */
    
      | zahl zahl  {
    
    
        wird als Stack von links nach rechts ausgewertet
    
        also zahl1 dann zahl2
    
      }
    
      ;
    
    
    verständlich :confused: Also müsste doch mit dem vorliegenden YACC-Code der AsmCode nicht wie:
    
    ...
    
    call _set_vergleichswert_byvar
    
    add esp, 8
    
    push dword [@var_var1]
    
    push dword [@var_var2]
    
    call _vergleiche_cmpeq
    
    ...
    
    
    aussehen, sondern so:
    
    ...
    
    push dword [@var_var1]
    
    push dword [@var_var2]
    
    call _set_vergleichswert_byvar
    
    add esp, 8
    
    call _vergleiche_cmpeq
    
    cmp eax, 1
    
    jne near Le0
    
    ...
    
    

    oder liege ich da jetzt falsch?

    Für sachdienliche Hinweise bin ich sehr dankbar!

    Gruß

    Jens

  4. Hallo,

    wie man ein Assemblerprogramm schreiben kann, ist für mich noch etwas neuland. Kann aber schon Konstrukte aufstellen.

    unter nopaste.info - free nopaste script and service

    könnt Ihr eine etwas überarbeitete Version vorfinden.

    Was mir komisch vorkommt ist, das Stack nicht gleich

    Stack ist.

    Zum Beispiel beginnend ab Zeile 256 hochrangelnd auf

    Zeile 216 -> expr (Zeile 88) -> weiter bei Zeile 118.

    Warum wird dann folgender Code erzeugt:

    Für Ideen und Vorschläge bin ich jedem dankbar!

    Gruß

    Jens

    ---

    
    BITS 32
    
    cpu 486
    
    
    extern _exit, _show_message
    
    extern _set_vergleichswert_A1
    
    extern _set_vergleichswert_A2
    
    extern _set_vergleichswert_byvar
    
    extern _vergleiche_cmpeq
    
    
    @var_var1: dd 10
    
    @Pshow_message0: db "ist 5",0
    
    @Pshow_message1: db "juhu 5",0
    
    @Pshow_message2: db "nuja halt 7",0
    
    @Pshow_message3: db "ok",0
    
    @Pshow_message4: db "ist nicht 5",0
    
    
    
    segment .text
    
    global _start_main
    
    _start_main:
    
        push ebp
    
        mov ebp, esp
    
    
    ; die folgende Zeilen müssten doch theoretisch
    
    ; unter push [@var_var2] stehen?
    
    ; mache ich einen Programmierfehler oder liegt
    
    ; das Problem am Yacc?
    
        call _set_vergleichswert_byvar
    
        add esp, 8
    
    
        push dword [@var_var1]
    
        push dword [@var_var2]
    
        call _vergleiche_cmpeq
    
        cmp eax, 1
    
        jne near Le0
    
        push @Pshow_message0
    
        call _show_message
    
        jmp near Lj0
    
    Le0:
    
        call _vergleiche_cmpeq
    
        cmp eax, 1
    
        jne near Le2
    
        push @Pshow_message1
    
        call _show_message
    
        jMP near Lj2
    
    Le2:
    
        call _vergleiche_cmpeq
    
        cmp eax, 1
    
        jne near Le4
    
        push @Pshow_message2
    
        call _show_message
    
        push @Pshow_message3
    
        call _show_message
    
        jMP near Lj4
    
    Le4:
    
        push @Pshow_message4
    
        call _show_message
    
        jmp near Lj4
    
    Lj4:
    
        jmp near Lj2
    
    Lj2:
    
        jmp near Lj0
    
    Lj0:
    
        push dword 0
    
        call _exit
    
        leave
    
        ret
    
    ---
    
    
    der QuellCode schaut wie folgt aus:
    
    
    ...
    
    var1 = 10
    
    //var2 = 1
    
    
    if var1 = var2
    
      showmessage("ist 5")
    
    elseif 5 = 7
    
      showmessage("juhu 5")
    
    elseif 5 = 5
    
      showmessage("nuja halt 7")
    
      showmessage("ok")
    
    else
    
      showmessage("ist nicht 5")
    
    endif
    
    

    ...

  5. Hallo Ihr beiden,

    unter

    nopaste.info - free nopaste script and service

    habe ich meine Bemühungen von heute morgen gepostet.

    Ich meinte mit endlos Tiefe, das geschachtelte IF ELSEIF ELSE ENDIF

    Anweisungen zu realisieren.

    Der Code funktioniert fast, mit der Ausnahme, das unter dem

    EndIF stehende Anweisungen nicht mehr behandelt werden

    z.B.:

    if 2 = 2
    
      zwei.ontimer = ok
    
    
      if 4 = 4
    
        vierzwei.ontimer = ok4
    
      else
    
        zweiff.ontimer = false4
    
      endif
    
    
      // hier wird der code irgendwie abgeschnitten
    
      zweidrei.ontimer = ok2
    
    else
    
      zwei.ontimer = false
    
    endif

    könnt ihr mal bitte ein Auge drauf werfen?

    Danke!

    Die yacc Software kann unter: Albert Gräf's Homepage geladen werden.

    Gruß

    paule

    P.S.: per yacc übersetzt, müssen ein paar Zeilen ersetzt werden ...

    Zeile 65:

    type YYSType = record

    yylbl : lbl ;

    end(*YYSType*);

    Zeile 932 bis 936 auskommentieren

    .... :

    (*

    if yysp>yymaxdepth then

    begin

    yyerror('yyparse stack overflow');

    goto abort;

    end;

    *)

    Und ja, Andy, ich will einen 32 Bit code basteln ... nasm.exe

  6. Hallo,

    wie kann ich eine (endlos) Tiefenschleife programmieren, die

    IF expr = expr

    code

    ELSEIF code

    ELSE code

    ENDIF

    Programmcode ausgeben kann?

    Zweck: Compilerbau, x86 32-Bit Assembler Output.

    Danke für Infos und Codebeispiele

    paule22

    P.S: Hier der momentane Code :

    function TParserClass.handle_if: Boolean;

    label label_if, start_if;

    var

    c: char;

    cs,s2: String;

    l,i,b: integer;

    begin

    start_if:

    if_counter := if_counter+1;

    if_counter_tmp := if_counter;

    c := skip_white_space;

    if c in ['_','A'..'Z','a'..'z'] then

    begin

    ident_str := c;

    scan_ident;

    cs := ident_str;

    c := skip_white_space;

    if c = '=' then

    begin

    c := skip_white_space;

    if (c >= '0') and (c <= '9') then

    begin

    num_str := c;

    scan_num;

    s2 := FActiveClass+':'+FActiveObject;

    i := FEventCodeOutput.IndexOf(s2);

    if i > -1 then

    begin

    if if_counter > 1 then

    TStringList(FEventCodeOutput.Objects).Add(#9+'mov dword eax, ' + num_str);

    TStringList(FEventCodeOutput.Objects).Add(#9+'cmp dword eax, [@v_' + cs + ']');

    TStringList(FEventCodeOutput.Objects).Add(#9+'jne near Lv_'+inttostr(if_counter));

    l := yylex;

    if l = TOK_THEN then

    begin

    label_if:

    l := yylex;

    if l = TOK_ELSE then begin end else

    if l = TOK_ENDIF then

    begin

    TStringList(FEventCodeOutput.Objects).Add('Lv_'+inttostr(if_counter)+':');

    end else

    if l = TOK_SHOWMESSAGE then

    begin

    handle_showmessage;

    TStringList(FEventCodeOutput.Objects).Add('Lv_'+inttostr(if_counter)+':');

    dec(if_counter);

    l := yylex;

    if l = TOK_ELSE then

    begin

    TStringList(FEventCodeOutput.Objects).Add(#9+'jmp Lv_'+inttostr(if_counter));

    end else

    if l = TOK_SHOWMESSAGE then showmessage('msfg') else

    if l = TOK_ENDIF then

    begin

    TStringList(FEventCodeOutput.Objects).Add(#9+'jmp Lv_'+inttostr(if_counter));

    end else handle_parser_code(l);

    //goto label_if;

    end;

    end;

    end;

    end;

    end;

    end;

    end(*handle_if*);

  7. Hallo,

    arbeite gerade mit VC6 Autoren Edition ...

    habe von folgenden Link Code gesaugt ...

    flipcode - Programming a Virtual File System

    Leider kann ich daraus keine EXE erstellen, da der Linker mekkert, das uafxcw-lib nicht gefunden werden konnte.

    Habe SP6 aufgespielt, und er mekkert immer noch :-(

    Habe im Netz geschaut, konnte aber keinen DownloadLink finden.

    Hilfe!!!

    Wer kennt dieses Problem und kann helfen?

    Danke

    paule

  8. Hallo,

    habe vor, eine Client/Server Anwendung zu schreiben, bei der kontinuierlich eine Anfrage erstellt und ein Response erzeugt werden soll.

    Im konkreten Fall, soll "GET /" am Server ausgelesen werden und dann soll ein Text an den Client zurück geschrieben werden.

    Aber das klappt irgendwie nicht ... kann mich da einer bitte helfen

    Danke schonmal. ...

    
    /////////////
    
    //  mserver.c
    
    
    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include <string.h>
    
    #include <sys/types.h>
    
    #include <sys/socket.h>
    
    #include <netinet/in.h>
    
    #include <arpa/inet.h>
    
    #include <unistd.h>
    
    #include <netdb.h>
    
    
    #define BUF_SIZ 4096
    
    
    int send_request(const int sock, const char *hostname)
    
    {
    
        char request[BUF_SIZ];
    
    
        snprintf(request, sizeof(request),
    
        "GET /\r\n"
    
        "Host: %s\r\n"
    
        "\r\n\r\n", hostname);
    
    
        if (send(sock, request, strlen(request), 0) == -1)
    
        {
    
            perror("send() failed");
    
            return 1;
    
        }
    
    
        return 0;
    
    }
    
    
    int view_response(const int sock)
    
    {
    
        char response[BUF_SIZ];
    
        int bytes;
    
    
        while((bytes = recv(sock, response, sizeof(response), 0)) > 0)
    
            fwrite(response, 1, bytes, stdout);
    
    
        if (bytes < 0)
    
        {
    
            perror("recv() failed");
    
            return 1;
    
        }
    
    
        return 0;
    
    }
    
    
    int main(int argc, char *argv[])
    
    {
    
        struct hostent *host;
    
        struct sockaddr_in addr;
    
        int s;
    
    
        if (argc < 2)
    
        {
    
            fprintf(stderr, "usage: %s <host>\n", argv[0]);
    
            return 1;
    
        }
    
    
        if (!inet_aton(argv[1], &addr.sin_addr))
    
        {
    
            host = gethostbyname(argv[1]);
    
            if (!host)
    
            {
    
                herror("gethostbyname() failed");
    
                return 2;
    
            }
    
            addr.sin_addr = *(struct in_addr*)host->h_addr;
    
        }
    
    
        s = socket(PF_INET, SOCK_STREAM, 0);
    
        if (s == -1)
    
        {
    
            perror("socket() failed");
    
            return 3;
    
        }
    
    
        printf("connecting to %s:7000...", inet_ntoa(addr.sin_addr));
    
        fflush(stdout);
    
    
        addr.sin_port = htons(7000);
    
        addr.sin_family = AF_INET;
    
    
        if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) == -1)
    
        {
    
            perror("connect() failed");
    
            return 4;
    
        }
    
    
        puts("ok.");
    
    
        if (send_request(s, argv[1]))
    
            return 5;
    
    
        if (view_response(s))
    
            return 6;
    
    
        close(s);
    
    
        return 0;
    
    }
    
    
    
    
    /////////////////////////////////////////////
    
    // mclient.c
    
    
    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include <string.h>
    
    #include <sys/types.h>
    
    #include <sys/socket.h>
    
    #include <netinet/in.h>
    
    #include <arpa/inet.h>
    
    #include <unistd.h>
    
    
    #define BUF_SIZ 4096
    
    
    int handle_client(const int sock)
    
    {
    
      char buffer[BUF_SIZ], puffer[200], *p, pget[126];
    
      int bytes;
    
    
      strcpy(puffer,"");
    
      strcpy(pget,"GET /");
    
      while((bytes = recv(sock, buffer, sizeof(buffer), 0)) > 0)
    
      strcat(puffer,buffer);
    
    
      p = strstr(puffer,pget);
    
      fprintf(stderr,"puffer = %s\n",p);
    
    
      if (strlen(p) > 0) {
    
        strcpy(buffer,"Hallo getter :-)\r\n");
    
        send(sock, buffer, strlen(buffer), 0);
    
      } else {
    
        strcpy(buffer,"NOT FOUND\r\n");
    
        send(sock, buffer, strlen(buffer), 0);
    
      }
    
    
      return 0;
    
    }
    
    
    int main(void)
    
    {
    
        int s, c, addr_len;
    
        struct sockaddr_in addr;
    
    
        s = socket(PF_INET, SOCK_STREAM, 0);
    
        if (s == -1)
    
        {
    
            perror("socket() failed");
    
            return 1;
    
        }
    
    
        addr.sin_addr.s_addr = INADDR_ANY;
    
        addr.sin_port = htons(7000);
    
        addr.sin_family = AF_INET;
    
    
        if (bind(s, (struct sockaddr*)&addr, sizeof(addr)) == -1)
    
        {
    
            perror("bind() failed");
    
            return 2;
    
        }
    
    
        if (listen(s, 3) == -1)
    
        {
    
            perror("listen() failed");
    
            return 3;
    
        }
    
    
        for(;
    
        {
    
            addr_len = sizeof(addr);
    
            c = accept(s, (struct sockaddr*)&addr, &addr_len);
    
            if (c == -1)
    
            {
    
                perror("accept() failed");
    
                continue;
    
            }
    
    
            printf("Client from %s\n", inet_ntoa(addr.sin_addr));
    
            handle_client(c);
    
    
            close(c);
    
        }
    
    
        close(s);
    
        return 0;
    
    }
    
    [/code]

  9. Hallo,

    ich bekomme folgende Ausgabe:

    c=a+b*c, a=4.94066e-324, b=9.88131e-324, c=0

    c=a+b*c, a=4.94066e-324, b=9.88131e-324, c=0

    nach der Übersetzung (Netwide Assembler und MinGW gcc):

    nasm -fwin32 z1.s

    gcc -o z1.exe z1.obj

    woran kann dss liegen, das so komische werte rauskommen???

    hier der code (auch nachzulesen unter:

    Sample nasm programs )

    BITS 32

    extern _printf

    %macro pabc 1 ; a "simple" print macro

    section .data

    .str db %1,0 ; %1 is macro call first actual parameter

    section .text

    ; push onto stack backwards

    push dword [c+4] ; double c (bottom)

    push dword [c] ; double c

    push dword [b+4] ; double b (bottom)

    push dword ; double b

    push dword [a+4] ; double a (bottom)

    push dword [a] ; double a

    push dword .str ; users string

    push dword fmt ; address of format string

    call _printf ; Call C function

    add esp,32 ; pop stack 8*4 bytes

    %endmacro

    section .data

    fmt: db "%s, a=%g, b=%g, c=%g",10,0

    a: dq 1

    b: dq 2

    five: dq 5.0 ; constant 5.0

    section .bss ; unitialized space

    c: resq 1 ; reserve a 64-bit word

    section .text

    global _main

    _main:

    @l1:

    fld qword [a]

    fld qword

    fld qword [c]

    fmulp

    faddp

    pabc "c=a+b*c"

    mov eax, 0

    leave

    ret

    Am Ende der Anwendung wird auch ein Speicherzugriffs Meldung von

    Windows ausgespuckt *pfui ... :(

  10. Hallo Gemeinde

    wie kann ich mit den indy9 componenten (Delphi) einen IRC-Server programmieren.

    Also das ComponentObjekt habe ich bereits auf eine Form gebracht.

    im Event "onExecute" habe ich Athread.connection.writeln('test '); geschrieben...das wird auch an den Cllient (Mirc) gesendet.

    Aber dann hält der Server an und am Client ist 2mal zu lesen "not recognized"

    Was mach ích da falsch?

    Hat vielleicht mit der implementierung zu tun .. hat jemand vielleicht ein deutsches RFC?

    paule

  11. Hallo Leute,

    ich habe probleme mit den abspeichern einer TreeView-Liste in einer THKStreams Liste.

    TreeView.SaveToFile funktoniert, jedoch erhalte ich ms.Size <= 0 , wenn ich savetostream anwende.

    ansonsten sollen noch die Nodes den text anzeigen, der wiederrum in einen THKStream-Eintrag geschrieben wurde, angeziegt wird....

    unter

    http://nopaste.php-q.net/233565

    könnt ihr den aktuellen Code finden ....

    Vielen Dank Für Eure Hilfe

  12. Hallo ihr lieben,

    hat einer von euch vielleicht ein-zwei beispiele für signal handling unter linux?

    wäre net, wenn ihr mir das erklären könnt, wie das geht, das man von Programm A aus ein signal an Programm B sendet.

    Vielen Dank schonmal

    paule

  13. Hallo Gemeinde,

    kann mir einer von euch mal erklären, wie ich die CORBA Beispiele zum laufen bekomme?

    Ich sitze hier vor Delphi 7 Corba/idl2pas/account dos beispiel und komme nicht weiter.

    Irgendjemand erzählte mir, das ich irgendwas importieren muss und Rêchte vergeben muss.

    Doch wie mache ich das?

    Wäre schön wenn jemand schreibt wie man den server und dann den client zum laufen bringt.

    Danke schonmal

  14. Hallo Gemeinde,

    kann mir einer sagen, wie ich die Zahlen

    1.2 und 1.3 addieren, multiplizieren und subtrahieren kann dividiert natürlich

    auch.

    Auch: wie ist es möglich, diese beiden Zahlen als Parameter an ein Unterprogramm zu übergeben.

    Mit Ganzzahlen geht das einfach so:

    push 1

    push 2

    call _addieren

    aber mit Zahlen mit Komma ?????

    das ganze sollte für einen Anfänger in Assembler sein.

    Tuts auch gern lesbar ..

    Jens

  15. Hallo

    ich habe ein MDI Fenster (Form1), in dem ich dann zwei weitere MDIChild Fenster (Form2) öffne.

    Wenn ich nun per Form1.Repaint in Form2.WindowPosChange (TMessage) mache, wird

    a) Canvas.FillRect(ClientRect) nicht ordentlich gezeichnet, erst wenn ich das Fenster (Form1) Maxi und dann Minimire oder umgekehrt wird der Canvas richtig gemalt.

    Der Canvas wird immer vom MDIChild Fenster Left,Top aus und dann 200,300 Pixel weit gezeichnet. und nicht von 0,0 an bis Width, Height (Form1).

    Wenn ich nun das MDIChild Fenster Form2 verschiebe, dann wird auch nicht die Linie so gezeichent wie sie sein soll, erst wieder beim Maxi und Miniminimiren wird odnungsgemäß gezeichnet.

    Hier der Code den ich verwende:

    procedure TForm1.FormPaint(Sender: TObject);

    begin

    if MDIChildCount > 1 then

    begin

    Canvas.Pen.Color := clRed;

    Canvas.Brush.Color := clRed;

    Canvas.FillRect(Rect(0,0,Form1.Width,Form1.Height));

    1.Canvas.Pen.Color := clBlack;

    Canvas.MoveTo((MDIChildren[0] as TForm2).Left-20,(MDIChildren[0] as TForm2).Top-20);

    Canvas.LineTo((MDIChildren[0] as TForm2).Left-20,(MDIChildren[0] as TForm2).Top-20);

    Canvas.LineTo((MDIChildren[1] as TForm2).Left-20,(MDIChildren[1] as TForm2).Top-20);

    end else

    begin

    Canvas.Pen.Color := clRed;

    Canvas.Brush.Color := clRed;

    Canvas.FillRect(Rect(0,0,Form1.Width,Form1.Height));

    Canvas.Pen.Color := clBlack;

    Canvas.MoveTo(100,100);

    Canvas.LineTo((MDIChildren[0] as TForm2).Left-20,(MDIChildren[0] as TForm2).Top-20);

    end;

    end;

    Tform2 Klasse:

    private:

    procedure WMPosChange(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;

    procedure TForm2.WMPosChange(var Message: TWMWindowPosChanging);

    begin

    // with PWindowPos(TMessage(Message).lParam)^ do

    // Flags:=Flags or SWP_NOMOVE;

    Form1.Repaint;

    end;

    Für Lösungen für dieses doofe Problem (also das ordnungsgemäße Zeichnen) bin ich euch Dankbar

    Mfg

    paule

  16. Hallo,

    Wir haben eine Gruppe von Studenten, die einen Vollzeit und die anderen

    Teilzeit. Beide haben eine Matrikelnummer. Aber sie unterscheiden sich in der

    Anzahl der Wochenstunden und andere Attributen. Wir wollen nun eine Liste

    über alle Studenten ausdrucken.

    Nun zur Frage: Wie muss das oder müssen die Objekte aussehen, die die

    Studenten repräsentieren?

    Hinweis: Aus einem Teilzeitstudenten kann ein Vollzeitstudent werden und

    umgekehrt. Und das auch mehrmals.

    Wie schaut die Lösung aus ?

    Bitte keinen Quellcode posten, sondern verbale Beschreibungen ...

    Viel Spass

    paule22

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...