Windows GDI und WinAPI

Antworten
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 »

Die Variante mit PColorTableArray müsste doch eigentlich gehen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von theo »

Das hatte ich eigentlich auch gedacht.
Theoretisch müsste ja sogar TColorTableArray (Dynamisch) schon klappen, oder?
Übrigens: Hast du die Demo auch mal getestet? Läuft's?

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

Beitrag von theo »

Sorry, Bock liegt woanders:

procedure TColorQuantizer.GetColorTable(AColorTable: POpenColorTableArray);
var
Qarr: TRGBQuadArray;

Wobei: TRGBQuadArray = array[Word] of TRGBQuad;

Das geht nicht lokal in der Prozedur (ich Dussel)

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 »

joa, die lokalen variablen werden ja auch aufm stack abgelegt aber n dynamisches array müsste lokal wieder gehn oder ?

und zum testen, hab gerad kein linux hier mach ich heut abend zuhaus
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von theo »

Christian hat geschrieben:joa, die lokalen variablen werden ja auch aufm stack abgelegt aber n dynamisches array müsste lokal wieder gehn oder ?
Theoretisch Ja.
Das war aber sowieso ein Schmarrn, ich brauch ja höchstens
array[$FF] of TRGBQuad; und das passt noch auf den Stack.
Christian hat geschrieben: und zum testen, hab gerad kein linux hier mach ich heut abend zuhaus
Danke!

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

24-Bit und läuft völlig problemlos...
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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

Beitrag von theo »

schnullerbacke hat geschrieben:24-Bit und läuft völlig problemlos...
Yae!
Hab soeben noch ein paar Anpassungen gemacht und jetzt läuft auch mit:
{$R+}
{$S+}

War eigentlich alles harmlos und z.B. mit einem byte casting beseitigt.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

machs per:

Code: Alles auswählen

procedure BlaBla(BufSize: longint; var Buf);
Möglicherweise brauchst du noch Mode: MyType (z.B. Farbtiefe), dann kannst du innerhalb der Prozdur einen TypeCast auf Buf machen:

Code: Alles auswählen

begin
   TMyStruct(Buf){[loopvar]}.Property:= arg;
   arg:= TMyStruct(Buf){[loopvar]}.Property;
end;
Das darf dann auch ein Array sein ({[loopvar]} = optional). Das übergibt genau Anzahl = BufSize Bytes und durch var Buf ist die Rückgabe gesichert.

#Edit

Kam etwas spät der Vorschlag, hilft aber manchmal um Probleme zu umgehen.
Zuletzt geändert von schnullerbacke am Do 1. Feb 2007, 14:56, insgesamt 1-mal geändert.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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

Beitrag von theo »

Danke, aber klappt ja jetzt!

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Der Witz bei var Buf liegt in der Tatsache, das es call by reference läuft, arbeitet also auf den tatsächlichen Daten. Beim call by value kann das bei dyn-Arrays in die Hose gehen.

Man kann im interface aber auch (const MyVar: MyType) angeben, das bewirkt etwa das gleiche.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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

Beitrag von theo »

schnullerbacke hat geschrieben:Beim call by value kann das bei dyn-Arrays in die Hose gehen.
Wieso das denn? Ich dachte Dynamische Array wären auf dem Heap und es würden sowieso nur Pointer übergeben?
Zuletzt geändert von theo am Do 1. Feb 2007, 16:11, insgesamt 1-mal geändert.

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Wobei man aber nicht sicher sein kann, das alle Elemente auch genau aufeinander folgen. Bei weiser Voraussicht geht man besser davon aus, das es nicht der Fall ist.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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 »

Änderst du immer so schnell deine Meinung ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

schnullerbacke
Beiträge: 1187
Registriert: Mi 13. Dez 2006, 10:58
OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
CPU-Target: AMD A4-6400 APU
Wohnort: Hamburg

Beitrag von schnullerbacke »

Die hab ich nicht geändert, ich geh tunlichst immer auf Nummer sicher. Deswegen ja lieber call by reference, so es denn geht. Mit call by value hab ich meine bösen Erfahrungen schon hinter mir, da sollte man schon ziemlich genau wissen was man da tut, sonst gibt es bei pointern schnell eigenwillige Überraschungen.
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.

(Ringelnatz)

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 »

Ne seite zurück hast noch geschrieben das man dynamische arrays ohne probleme mit move angehen kann ... und jetzt plötzlich auf nummer sicher ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten