الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حل مشكلة listView مع WinXp (المشكلة موجودة بجميع الاصدارات عدا ال7 )

مغلق
بدأه Dr_HUS في 12 يونيو 2003 · 4 رد · 680 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مساؤكم سكر ...

طيب باختصار انا واجهتني المشكلة التالية :

حين استخدام listview مع الكمبوننت WinXp من شركة TMS (هذا الكمبوننت يجعل الازرار والافتتات تظهر كما في اكس بي حين استخدام برنامجك على ال اكس بي)

المهم المشكلة كانت انه يستحيل ان تضع اليست فيو وال اوين اكس بي مع بعضعم .. حيظهر خطا في الكيرنل 32

وهذه المشكلة موجودة في جميع الاصدارات ما عدا الاصدار السابع

وحل المشكلة هو كالتالي

بتروح على ملف ال

ComCtrls.pas

والى حتلاقيه طبعا تحت السورس هون

SourceVcl

و بتغير الاصطر التالية

procedure TCustomListView.UpdateColumn(AnIndex: Integer);

const IAlignment: array[Boolean, TAlignment] of LongInt =

((LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_CENTER),

(LVCFMT_RIGHT, LVCFMT_LEFT, LVCFMT_CENTER));

var

Column: TLVColumn;

AAlignment: TAlignment;

begin

if HandleAllocated then

with Column, Columns.Items[AnIndex] do

begin

mask := LVCF_TEXT or LVCF_FMT or LVCF_IMAGE;

iImage := FImageIndex;

pszText := PChar(Caption);

AAlignment := Alignment;

if Index <> 0 then

fmt := IAlignment[UseRightToLeftAlignment, AAlignment]

else fmt := LVCFMT_LEFT;

// start patch

{if FImageIndex <> -1 then

fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES;}

if FImageIndex <> -1 then

fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES

else

mask := mask and not (LVCF_IMAGE);

// end patch

if WidthType > ColumnTextWidth then

begin

mask := mask or LVCF_WIDTH;

cx := FWidth;

ListView_SetColumn(Handle, Columns[AnIndex].FOrderTag, Column);

end

else begin

ListView_SetColumn(Handle, Columns[AnIndex].FOrderTag, Column);

if ViewStyle = vsList then

ListView_SetColumnWidth(Handle, -1, WidthType)

else if (ViewStyle = vsReport) and not OwnerData then

ListView_SetColumnWidth(Handle, Columns[AnIndex].FOrderTag, WidthType);

end;

end;

end;

اي انك بتدور على السطر الي

procedure TCustomListView.UpdateColumn(AnIndex: Integer);

الى السطر

ListView_SetColumnWidth(Handle, Columns[AnIndex].FOrderTag, WidthType);

بملفك القديم وبتستبدلهم بالكود الكتبتلك ياه بالاعلى ..

وبس هيك بتكون انتهت العملية ..

ااااااه بس لا تنسا ترجع تعمل كومبايل لهذا الكمبوننت ..

وهيك بتكون انحلت المشكلة ..

بالعموم انا ارفقت مع المقال النسخة الجديدة اي المعدلة من ملف

ComCtrls.pas

لو انتا بتستخدم دلفي 6 بس حط النسخة المرفقة مكان القديمة الي عندك واعمل كومبايل ... ولو انتا بتستخدم قبل دلفي ستة فعليك بالطريقة الي فوق

ااااااااه

بالمناسبة نسيت خبركون هاي الفهلوية مش مفهومية مني ولا بالفطرة عرفت انو في غلط وصلحتو ..

لا انا وجهتني المشكلة وعييت على اني حلها .. بعديم رحت راسلت شركة ال TMS

ةخبرتهم .. وهني طلعو شباب محترمين خمس دقايق وردولي الجواب فيه الحل هذا .. وهني الي خبروني انو هاي المشكلة موجودة بما قبل السبعة كمان .. مشكورين والله

سلامات يا شباب ..

تحياتي الحارة

comctrls.zip

#2

شكراً جزيلاً ..على هذه المعلومة.....(f)

وأرجو تقديم المزيد

اخوك:cool:

#3

هلا بالفوكس والله .. على راصي يا حبيب ..

بس تعقيبا على الموضوع:rolleyes: : هاي المشكلة حتواجهك بحالة واحدة فقط:P

لو انك استعملت اليست فيو

ListView

وحطيت بالستايل

ViewStyle

على Report

يعني لو انتا حاطط الفيو ستايل على ايكون او سمول ايكون او ليست ما حيحصل شي .. حيشتغل كلشي نظامي بس فقط المشكلة تكمن بالريبورت

سلاماااات :)

#4

سجل عندك يا دكتور ....اعجابي فيك وفي مواضيعك ....:D

#5

:o كسفتني يا بيه :P

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…