Autor Beitrag
Wil
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 30.09.10 21:10 
Hallo!

Ich habe leider keine Ahnung von C. :cry:
Ich hoffe jemand kann das unterstehende algorithme umprogrammieren in Delphi7. Vielleicht ist es schwierig, aber ich bin ueberzeugt jemand wird es schaffen. :wink:
Ich waehre dafuer sehr dankbar! :D

Wil (aus Holland). :wink:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
//Fensterfunktion zur Message-Bearbeitung
LRESULT CALLBACK RueckWndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
   WORD nummer, status;
   LONG ret = 0;
   if(message == msgApparaat) // Message von Apparaat
   {
      switch(wParam)
      {
         case CLA_AKTIV: // Apparaat meldet sein Fensterhandle
           hApparaat = (HWND) lParam;
           ApparaatAusgabe(CLA_ANMELDUNG, (WORD) hApparaatMsgWnd);
           break;

         case CLA_LOK_SPEEDINFO: // geschwindigkeit geändert
           nummer = HIWORD(lParam);
           status = LOWORD(lParam);
           int lokRicht = status & 0x8000 ? LR_VOR : LR_RUECK; //
Fahrrichtung
           status = status & 0x7FFF;
           // ... Auswertung der Geschwindigkeit
         // ... alle anderen Aktionen auswerten
       }
  }

  else
    ret = DefWindowProc(hWnd, message, wParam, lParam);
 return ret;
}


Moderiert von user profile iconNarses: C#-Tags hinzugefügt
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Fr 01.10.10 05:50 
Hey,

das müsste ungefähr so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function RueckWndProc(hWnd: HWND; Message: Cardinal; wParam: WPARAM, lParam: LPARAM): LRESULT;
var
  nummer, status: Word;
  lokRichtung: Integer;
begin
  result := 0;
  if (Message == msgApparaat) then begin
    case wParam of
      CLA_AKTIV: begin
        hApparaat := HWND(lParam);
        ApparaarAusgabe(CLA_ANMELDUNG, WORD(hApparaatMsgWnd));
      end;
      CLA_LOK_SPEEDINFO: begin
        nummer := HiWord(lParam);
        status := LoWord(lParam);
        lokRichtung := status and $8000 mod LR_VOR / LR_RUECK; //":" ist gleich "/" ?!
        status := status and $7FFF;
      end;
    end;
  end else result := DefWindowProc(hWnd, message, wParam, lParam);
end;

Ich bin mir jetzt aber nicht sicher, ob es die Typen (WPARAM, LPARAM) so in Delphi gibt. Außerdem weiß ich nich genau ob der ":"-Operator in C das normale "/" in Delphi war...

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^

Für diesen Beitrag haben gedankt: Wil
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 01.10.10 06:02 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem weiß ich nich genau ob der ":"-Operator in C das normale "/" in Delphi war...
Das ist der sogenannte Konditionaloperator. Das entspricht dem IfThen in Delphi:
ausblenden C#-Quelltext
1:
int MyResult = a ? b : c;					
In Delphi ist das:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  MyResult: Integer;
begin
  MyResult := IfThen(a, b, c);
// oder:
  if a then
    MyResult := b
  else
    MyResult := c;

Für diesen Beitrag haben gedankt: Wil
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 02.10.10 17:58 
Stimmt, jetz wo du' sagst fällt mir wieder ein, das ich da ma was drüber gelesen hab. Aber status & $8000 ist doch kein Boolean, also kann man das ja gar nicht so einfach übersetzen. Oder is da dann ein ByteBool gemeint?

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^

Für diesen Beitrag haben gedankt: Wil
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 02.10.10 18:03 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Stimmt, jetz wo du' sagst fällt mir wieder ein, das ich da ma was drüber gelesen hab. Aber status & $8000 ist doch kein Boolean, also kann man das ja gar nicht so einfach übersetzen. Oder is da dann ein ByteBool gemeint?

MfG Bergmann.

Es ist ein bitweises Boolean. ;)
Deswegen sollte das wohl dann so lauten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
function RueckWndProc(hWnd: HWND; AMessage: Cardinal; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
  nummer, status: Word;
  lokRichtung: Integer;
begin
  result := 0;
  if (AMessage = msgApparaat) then begin
    case wParam of
      CLA_AKTIVE: begin
        hApparaat := HWND(lParam);
        ApparaarAusgabe(CLA_ANMELDUNG, WORD(hApparaatMsgWnd));
      end;
      CLA_LOK_SPEEDINFO: begin
        nummer := HiWord(lParam);
        status := LoWord(lParam);
        if (status and $8000) <> 0 then //Anmrk.: Boolean(status and $8000) wäre die exakte Entsprechung ;-)
          LR_VOR
        else
          LR_RUECK;
        status := status and $7FFF;
        // ... Auswertung der Geschwindigkeit
        // ... alle anderen Aktionen auswerten
      end;
    end;
  end
  else
    result := DefWindowProc(hWnd, AMessage, wParam, lParam);
end;


Zuletzt bearbeitet von Marc. am Sa 02.10.10 18:17, insgesamt 4-mal bearbeitet

Für diesen Beitrag haben gedankt: Wil
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 02.10.10 18:10 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Aber status & $8000 ist doch kein Boolean, also kann man das ja gar nicht so einfach übersetzen.
0 ist False, alles andere True. Also kannst du einfach auf Boolean casten. Das ist ja auch genau der Punkt wo man stolpert, wenn man auf "= True" prüft. Weil man dann nur auf einen der möglichen Werte für True prüft.

Du kannst natürlich auch <> 0 extra abfragen. ;-)

Für diesen Beitrag haben gedankt: Wil
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 02.10.10 19:43 
Hey,

also das geht in D7 nicht. Is das bei den neuen Versionen möglich?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var i: Integer;

i := 0;
if i then
  Caption := 'ja'
else
  Caption := 'nein';


MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^

Für diesen Beitrag haben gedankt: Wil
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 02.10.10 19:47 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
also das geht in D7 nicht. Is das bei den neuen Versionen möglich?

Nein, deswegen auch der Cast nach Boolean. Das geht aber auch nur, weil "0" als FALSE definiert ist.

Für diesen Beitrag haben gedankt: Wil
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Sa 02.10.10 19:53 
Hey,

das casten hab ich überlesen, sry :oops:
das lustige is, das mein AntiVir mein Programm jetz als Virus erkennt :D aber nur wenn der Integer-Wert ungleich 0 ist. Naja is ja auch ega, jetz weiß ich ja das es geht :P
Danke.

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^

Für diesen Beitrag haben gedankt: Wil
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Sa 02.10.10 20:00 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
das lustige is, das mein AntiVir mein Programm jetz als Virus erkennt :D aber nur wenn der Integer-Wert ungleich 0 ist.

OT: Welchen Virenscanner benutzte denn? Ich schlag vor, Du schickst denen das Programm respektive die entsprechende Codestelle zur Analyse, damit die diese FalsePositive-Meldung beheben können. :D
Bei mir (BitDefender) passiert das nämlich nicht.

Für diesen Beitrag haben gedankt: Wil
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 02.10.10 20:32 
Antivir halt, was die da für einen Blödsinn produzieren ist ja nun hinlänglich bekannt. Antivir erkennt eh alles was sich bewegt als Virus. :mrgreen:

Für diesen Beitrag haben gedankt: Wil
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: So 03.10.10 02:15 
Mit Antivir meinte ich nicht Antivir, sonder mein Antivirus-Prgramm, welches avast! ist^^

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^

Für diesen Beitrag haben gedankt: Wil
Wil Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 04.10.10 00:09 
Ich bin sehr froh das ihr alle solche gute Uebersezungen fuer mich macht (C==>D7). Jetzt bin wahrscheinlich gans nahe dran!!!!!!!!!!!!!!!!!!!!!!!!



Mit sehr freundlichen Gruese, Wil.
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 04.10.10 00:28 
Hey,

wieso ganz na dran? Marc. hats doch fertig gepostet...

MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
iterion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21
Erhaltene Danke: 2

Win XP ,Suse 11.3
Delphi 7
BeitragVerfasst: Mo 04.10.10 01:07 
user profile iconWil hat folgendes geschrieben Zum zitierten Posting springen:
Ich bin sehr froh das ihr alle solche gute Uebersezungen fuer mich macht (C==>D7). Jetzt bin wahrscheinlich gans nahe dran!!!!!!!!!!!!!!!!!!!!!!!!



Mit sehr freundlichen Gruese, Wil.


Vielleicht kann man in c++ eine dll daraus machen, da es sich um eine funktion handelt, ich habe selber noch keine ahnung von c++ aber hier steht wie mans macht :
logix4u.net/Programm..._DLLs_with_VC++.html

Dann brauchst du nur die dll in delphi laden und die funktion aufrufen, ist sicher einfacher.
Ueber die antiviren, kann ich nur eins sagen: Wenn man sie auschaltet und nur benutzt wenn man den programmen nicht traut sind sie am nützlichsten, ansonsten sind es nur Cpu killer, der beste antivirus ist Human IQ!!!

Für diesen Beitrag haben gedankt: Martok