Probleme mit Benutztung von WM_PAINT

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Probleme mit Benutztung von WM_PAINT

Beitrag von Nils »

Hi,

vorweg: ich bin kein Pascalanfänger und arbeite schon seit vielen Jahren mit Borland Delphi. Eigentlich ist Delphi ok, aber immer wenn ich unter Linux bin, nervt es mich, dass ich 1. meine eigenen Programme nicht nutzen kann und 2. immer C programmieren muss. Deshalb kam ich zu Lazarus.

Ich möchte nun ein Programm nach Lazarus portieren. Wie muss ich die letzten beiden Zeilen der folgenden schreiben, damit sie den Sinn beibehält und kompiliert werden kann ? Und noch interessanter: falls das überhaupt möglich ist, geht es dann auch noch unter Windows ?

Code: Alles auswählen

TCodeEdit = class(TRichEdit)
 
  private
    ...
 
 
 
    procedure WMPaint(var Msg: TWMPaint); message WM_PAINT;
 
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
 
   ...

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme mit Benutztung von WM_PAINT

Beitrag von theo »

Ich fürchte dein Problem liegt nicht in den letzten beiden Zeilen sondern in der Ersten:
Nils hat geschrieben:
TCodeEdit = class(TRichEdit)
TRichEdit ist ein gekapseltes Windows Control (RichEdit32.dll oder so) das gibt's nicht auf Linux.

Der Rest müsste so gehen (Unit LMessages in uses aufnehmen);

Code: Alles auswählen

procedure WMPaint(var Msg: TLMPaint); message LM_PAINT;
 
    procedure WMSize(var Message: TLMSize); message LM_SIZE;

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Ich habe nun folgende Fehler bei deinen beiden Zeilen. Muss da noch was in die uses-Klausel ?

Code: Alles auswählen

Error: Identifier not found "TLMPaint"
Error: Identifier not found "LM_PAINT"
Error: Illegal expression after message directive
Error: Identifier not found "TLMSize"
Error: Identifier not found "LM_SIZE"
Error: Illegal expression after message directive

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Nils hat geschrieben:Ich habe nun folgende Fehler bei deinen beiden Zeilen. Muss da noch was in die uses-Klausel ?
Gähn.... Aber lesen kannst du schon oder? Steht doch oben!

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Arghs, sry, irgendwie überlesen. Thx.

Gibt es eigentlich eine Liste mit allen Message ? Ich bräuchte als nächste EM_GETRECT und danach könnten noch viele andere kommen.
Meine Musik: spiker-music.net

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Nils hat geschrieben:Arghs, sry, irgendwie überlesen. Thx.

Gibt es eigentlich eine Liste mit allen Message ? Ich bräuchte als nächste EM_GETRECT und danach könnten noch viele andere kommen.
Erklär mal was du eigentlich erreichen willst.
Was du da versuchst, sieht mir ziemlich nach Holzweg aus.

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Ich brauche ein Programm, welches Syntaxhighlighting unterstützt. Es gibt genug im Netz, aber ich möchte es selbst machen. Da ich aus dem "Macht nichts, klatsch ich halt ne Komponente auf die Form"-Alter raus bin, möchte ich die Komponente bzw. ein Memo mit Zeilennummerierung und Highlighting selbst basteln. Es ist mit WM_PAINT möglich, unter Windows bestimmte Wörter im Memo hervorzuheben. Unter Windows funktionierte es auch, aber nicht mit Lazarus.
Meine Musik: spiker-music.net

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Tja, wenn du das unbedingt selber machen willst.... Aber mit Memo überpinseln kommste nicht weit.
Die Lazarus IDE benützt SynEdit, das würde ich auch nehmen für diesen Zweck. Es ist sogar standardmässig in der Komponentenpalette.

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Ich weiß, aber SynEdit ist regelrecht überladen. Außerdem geht es mir darum, dass ich einfach mal ein Projekt öffnen kann, ohne gleich tausend andere Komponenten zu benutzen. Kommt man mit Memo nur bei Lazarus nicht weit ? (es geht nämlich bei Delphi)
Meine Musik: spiker-music.net

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Also deine Windows Message Geschichten stammen doch garantier auch aus dem Netz wo bitte ist der Unterschied zu "ich nehm ne komponente" ??
Synedit ist was du suchst.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Nils hat geschrieben:Kommt man mit Memo nur bei Lazarus nicht weit ? (es geht nämlich bei Delphi)
Delphi ist aber auch nicht Cross-Platform. Mit deiner Winapi herangehensweise wirst du auf Linux keine Freude haben. EM_GETRECT etc. sind alles Windows Messages. Ausserdem kapselt TMemo unter versch. Widgetsets völlig andere Controls, die nur via LCL eine gleiche Schnittstelle haben. Sobald du aber versuchst, in die Funktionsweise des zugrundeliegenden Controls reinzufummeln wird's wohl schiefgehen.

Halte dich am besten an die LCL und versuche so wenig wie möglich OS-spezifisch zu programmieren. Aber am Besten wäre aber garantiert Synedit zu verweden.
Zuletzt geändert von theo am Mo 28. Mai 2007, 18:13, insgesamt 1-mal geändert.

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

@Christian: nö, selbst gemacht, wer MSDN benutzen kann, kann das einfach ;)
@theo: Ist die Frage, wie das SynEdit macht. Ich finde irgendwie den Code von SynEdit gerade nicht unter Linux. Unter Windows war es ein TCustomControl, kA wie das bei Lazarus wieder ist.

Problem hierbei ist einfach mal wieder, dass Linux irgendwo doch einfach ein wenig umständlicher ist.
Meine Musik: spiker-music.net

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Nils hat geschrieben:@theo: Ist die Frage, wie das SynEdit macht. Ich finde irgendwie den Code von SynEdit gerade nicht unter Linux. Unter Windows war es ein TCustomControl, kA wie das bei Lazarus wieder ist.
Wie kann man das nicht finden? Platziere ein Synedit auf der Form und dann mach "Deklaration suchen" (rechte Maustaste über dem uses Synedit).
Ist natürlich auch unter LCL ein TCustomControl.

Nils hat geschrieben: Problem hierbei ist einfach mal wieder, dass Linux irgendwo doch einfach ein wenig umständlicher ist.
Wieso? Nur weil Winapi Zeug nicht läuft? Dasselbe könnest du von Windows sagen, wenn du ein GTK spezifisches Control auf Winapi übersetzen willst.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Versteh ich net ganz, du sagst du wurschtelst sonstwietief mit der winapi rum aber findest n stück source nicht ?
Möglichkeit 1: Deklaration finden wie Theo sagte
Möglichkeit 2: Volltextsuche
Möglichkeit 3: Dateisuche

auf eine müsste man ja kommen.

Und wie theo schon andeutete, wenn du unter Linux und evntl auch MacOS programmieren möchtest, vergiss doch ganz schnell mal das winapi und msdn.
Ist die Frage, wie das SynEdit macht.
synedit zeichnet alles von der pike auf selber
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Ich mach jetzt auch TCustomControl und gut ist, danke für alle Antworten.
Meine Musik: spiker-music.net

Antworten